一个sqlserver存储过程转oracle的问题
时间:2011-09-21
来源:互联网
最近要将sqlserver存储过程转为oracle,有一个不知如何转,向高手求教!
sqlserver code:
create procedure dzws
@idtype int,
@planid int,
@newid int,
@uid int output
as
if not exists(select * from manage)
begin
return
end
declare @tempid int
declare @index int
declare @flag int
set @flag=0
set @index=0
if @idtype=101
begin
select @id=zk_id from manage
while @index<1000
begin
set @tempid=@id+@index
if(@tempid>=1000)
set @tempid=@tempid-1000
if(@tempid<>0)
begin
if not exists(select * from manage where mid=@tempid+1000)
begin
set @id=@tempid+1000
set @flag=1
update manage set zk_id=@tempid+1
break
end
end
set @index=@index+1
end
sqlserver code:
create procedure dzws
@idtype int,
@planid int,
@newid int,
@uid int output
as
if not exists(select * from manage)
begin
return
end
declare @tempid int
declare @index int
declare @flag int
set @flag=0
set @index=0
if @idtype=101
begin
select @id=zk_id from manage
while @index<1000
begin
set @tempid=@id+@index
if(@tempid>=1000)
set @tempid=@tempid-1000
if(@tempid<>0)
begin
if not exists(select * from manage where mid=@tempid+1000)
begin
set @id=@tempid+1000
set @flag=1
update manage set zk_id=@tempid+1
break
end
end
set @index=@index+1
end
作者: dobopo 发布时间: 2011-09-21
你调的时候,再改改,差不多了
create procedure dzws
(idtype in number,
planid in number,
newid in number,
uuid out number
)
is
tempid number(10) := 0;
vn_index number(10) := 0;
flag number(10) := 0;
in_cnt number(10) := 0;
vn_zkid number(10) := 0;
vn_id number(10) := 0;
cursor c_zk_id is select zk_id from manager where rownum < 1000 + 1;
begin
select count(1) into in_cnt from manage;
if in_cnt = 0 then
return;
end if;
if idtype = 101 then
for rec_zk_id in c_zk_id
loop
tempid := rec_zk_id.zk_id + vn_index;
if tempid <> 0 then
select count(1) into in_cnt from manage where mid=tempid + 1000;
if in_cnt = 0 then
vn_id := tempid + 1000;
flag := 1;
update manage set zk_id = vn_id + 1;
commit;
end if;
end if;
vn_index := vn_index + 1;
end loop
end if;
end dzws;
create procedure dzws
(idtype in number,
planid in number,
newid in number,
uuid out number
)
is
tempid number(10) := 0;
vn_index number(10) := 0;
flag number(10) := 0;
in_cnt number(10) := 0;
vn_zkid number(10) := 0;
vn_id number(10) := 0;
cursor c_zk_id is select zk_id from manager where rownum < 1000 + 1;
begin
select count(1) into in_cnt from manage;
if in_cnt = 0 then
return;
end if;
if idtype = 101 then
for rec_zk_id in c_zk_id
loop
tempid := rec_zk_id.zk_id + vn_index;
if tempid <> 0 then
select count(1) into in_cnt from manage where mid=tempid + 1000;
if in_cnt = 0 then
vn_id := tempid + 1000;
flag := 1;
update manage set zk_id = vn_id + 1;
commit;
end if;
end if;
vn_index := vn_index + 1;
end loop
end if;
end dzws;
作者: yixilan 发布时间: 2011-09-22
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28