问答

oracle函数如何转换为sqlserver函数?

作者:admin 2021-08-20 我要评论

oracle函数代码: CREATE FUNCTION [test].[GETWORKORDERID] (numberPre varchar2) return varchar2 is PRAGMA AUTONOMOUS_TRANSACTION; findId number(8); --最...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

oracle函数代码:
CREATE FUNCTION [test].[GETWORKORDERID] (numberPre varchar2)
return varchar2 is
PRAGMA AUTONOMOUS_TRANSACTION;
findId number(8); --最大id
nowNumber varchar2(50);
n_count number(8);
n_count2 number(8);
nowNumber2 varchar2(50);
begin

nowNumber := to_char(sysdate, 'yyyymmdd');

nowNumber2 := to_char(sysdate - 1, 'yyyymmdd');

select count(1)

into n_count2
from user_sequences t

where t.sequence_name = 'SEQ_' || numberPre || '_' || nowNumber2;

if n_count2 > 0 then

execute immediate 'drop sequence SEQ_' || numberPre || '_' ||
                  nowNumber2;

end if;

select count(1)

into n_count
from user_sequences t

where t.sequence_name = 'SEQ_' || numberPre || '_' || nowNumber;

if n_count = 0 then

execute immediate 'create sequence SEQ_' || numberPre || '_' ||
                  nowNumber ||
                  ' minvalue 10000 maxvalue 99999999 start with 10000 increment by 1 NOCYCLE NOCACHE';

end if;

execute immediate 'select SEQ_' || numberPre || '_' || nowNumber ||

                '.nextval from dual'
into findId;

commit;
return numberPre || nowNumber || findId;
end;

转换为sqlserver代码:
CREATE FUNCTION [ZZC-CSR].[GETWORKORDERID] (@numberPre nvarchar(max))
returns table
as
begin
DECLARE @findId bigint;
DECLARE @nowNumber bigint;
DECLARE @n_count bigint;
DECLARE @n_count2 bigint;
DECLARE @nowNumber2 bigint;
DECLARE @sql1 nvarchar(max);
DECLARE @sql2 nvarchar(max);
DECLARE @sql3 nvarchar(max);
DECLARE @sql4 nvarchar(max);
DECLARE @result nvarchar(max);
set @nowNumber=convert(varchar(30),getdate() ,20)
set @nowNumber2=convert(varchar(30),getdate() ,20)
select count(1)

into n_count2
from user_sequences t

where t.sequence_name = 'SEQ_' + numberPre + '_' + nowNumber2;

if n_count2 > 0 begin

set @sql1= 'drop sequence SEQ_' + numberPre + '_' + nowNumber2;
execute (@sql1) 

end ;

select count(1)

into n_count
from user_sequences t

where t.sequence_name = 'SEQ_' + @numberPre + '_' + @nowNumber;

if n_count = 0 begin

set @sql2='create sequence SEQ_ ' + @numberPre + '_' + @nowNumber +
                  ' minvalue 10000 maxvalue 99999999 start with 10000 increment by 1 NOCYCLE NOCACHE';
execute (@sql2)

end ;

set @sql3='select SEQ_ ' + @numberPre + '_' + @nowNumber + '.NEXT VALUE FOR user_sequences';
set @findId=@sql3;
set @sql4=@numberPre + @nowNumber + @findId;
insert into @result exec (@sql4)

end;

报错信息:消息 102,级别 15,状态 31,过程 GETWORKORDERID,行 43 [批起始行 0]
“BEGIN”附近有语法错误。

不知道哪里有错误了?

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 使用箭头函数return数据不能实现

    使用箭头函数return数据不能实现

  • 个人小程序号能接入小程序3D地图吗?

    个人小程序号能接入小程序3D地图吗?

  • vue 移动端项目中,使用了better-scrol

    vue 移动端项目中,使用了better-scrol

  • css如何做出区域平均划分为四列

    css如何做出区域平均划分为四列

腾讯云代理商
海外云服务器