【发布时间】:2017-12-06 05:18:56
【问题描述】:
我无法将此 SQL Server 代码转换为 Oracle 代码。我不是 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
【问题讨论】:
-
您遇到什么错误?
-
在声明这些变量时在第 1 行和第 2 行出现语法错误。还有更多错误
-
那么您是否尝试过了解如何在 Oracle 中声明变量?需要 1 次 Google 搜索才能发现它使用与 SQL Server 不同的语法。我的建议是你开始一个一个地解决错误。你可能会遇到下一个错误。如果您对此感到困惑,您可以随时发布带有特定请求的新问题。现在看起来好像您只是希望有人为您翻译代码。所以不是为了那个。我们乐于帮助您解决具体问题,但也有理由期待您能做出一些努力。
-
请不要指望我们编写整个代码来节省您的时间。当您自己编写它时表现出一些努力,我们愿意提供帮助。您不必是 SQL 专家也可以尝试
-
感谢 Schmitz 和 Kaushik。我试图转换代码。请检查我是否可以进一步改进它或是否存在任何错误。因为这段代码给了我结果。
标签: sql oracle11g sql-convert