[英]SQL Server to Oracle conversion
I am unable to convert this SQL Server code to Oracle code. 我无法将此SQL Server代码转换为Oracle代码。 I am not SQL expert, can anyone help in converting this code to Oracle compatible.
我不是SQL专家,任何人都可以帮助将此代码转换为与Oracle兼容的代码。
Declare @lvl as int
Declare @rows as int
DECLARE @foo as Table(
KV_MANAGERNR int,
KV_PERSONNR varchar(10),
ord int,
lvl int)
INSERT @foo (KV_MANAGERNR, KV_PERSONNR, ord, lvl)
select KV_MANAGERNR, KV_PERSONNR, row_number() over(order by KV_PERSONNR), 0
from PERSONSMANAGER where KV_MANAGERNR='127723'
set @rows=@@ROWCOUNT
set @lvl=0
--Do recursion
WHILE @rows > 0
BEGIN
set @lvl = @lvl + 1
INSERT @foo (KV_MANAGERNR, KV_PERSONNR, ord, lvl)
SELECT DISTINCT b.KV_MANAGERNR, b.KV_PERSONNR, row_number() over(order
by b.KV_PERSONNR), @lvl
FROM PERSONSMANAGER b
inner join @foo f on b.KV_MANAGERNR = f.KV_PERSONNR
--might be multiple paths to this recursion so eliminate duplicates
left join @foo dup on dup.KV_PERSONNR = b.KV_PERSONNR
WHERE f.lvl = @lvl-1 and dup.KV_PERSONNR is null
set @rows=@@ROWCOUNT
END
SELECT DISTINCT KV_PERSONNR from @foo order by KV_PERSONNR
DECLARE
v_lvl Number:=0;
v_rows number:=1;
BEGIN
INSERT INTO nt_list_0 (KV_MANAGERNR, KV_PERSONNR, ord, lvl)
select KV_MANAGERNR, KV_PERSONNR, row_number() over(order by
KV_PERSONNR), 0 from PERSONSMANAGER where KV_MANAGERNR='100047';
WHILE v_rows>0
LOOP
v_lvl := v_lvl +1;
INSERT INTO nt_list_0 (KV_MANAGERNR, KV_PERSONNR, ord, lvl)
SELECT DISTINCT b.KV_MANAGERNR, b.KV_PERSONNR, row_number()
over(order by b.KV_PERSONNR), v_lvl
FROM PERSONSMANAGER b
inner join nt_list_0 f on b.KV_MANAGERNR = f.KV_PERSONNR
left join nt_list_0 dup on dup.KV_PERSONNR = b.KV_PERSONNR
WHERE f.lvl = v_lvl-1 and dup.KV_PERSONNR is null;
v_rows := sql%rowcount;
END LOOP;
END;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.