2017-12-06 7 views
0

이 SQL Server 코드를 Oracle 코드로 변환 할 수 없습니다. 나는 SQL 전문가가 아니므로이 코드를 오라클 호환으로 변환하는 데 도움을 줄 수 있습니다.SQL Server 대 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 @[email protected]@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 @[email protected]@ROWCOUNT 
END 

SELECT DISTINCT KV_PERSONNR from @foo order by KV_PERSONNR 
+0

어떤 오류 (들)을받을 수있는 방법은 무엇입니까? – SchmitzIT

+0

이 변수를 선언하는 중에 Line 1 & 2 구문 오류가 발생했습니다. 그리고 더 많은 오류 –

+0

그래서 당신은 오라클에서 변수를 선언하는 방법을 찾으려고 시도 했습니까? SQL Server와 다른 구문을 사용하려면 Google 검색이 1 번 필요합니다. 제 제안은 오류 1을 1로 풀기 시작한다는 것입니다. 다음 오류가 발생할 가능성이 높습니다. 문제가 발생하면 특정 요청과 함께 항상 새로운 질문을 게시 할 수 있습니다. 지금은 누군가가 당신을 위해 코드를 번역하기를 원하는 것처럼 보입니다. 그래서 그런 의미가 아닙니다. 우리는 특정 문제로 당신을 도와주고 싶지만, 당신 편에서 약간의 노력을 볼 것으로 합리적으로 기대합니다. – SchmitzIT

답변

0
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;