2017-12-06 29 views
0

このSQL ServerコードをOracleコードに変換できません。私はSQLの専門家ではない、誰もこのOracleの互換性にこのコードを変換することができます。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

これらの変数を宣言するときに、1行目と2行目の構文エラーが発生しました。多くのエラー –

+0

Oracleで変数を宣言する方法を試してみましたか?それは、それがSQL Serverとは異なる構文を使用していることを見つけるために1 Googleの検索が必要です。私の提案は、エラーを1で解決することです。あなたは次のエラーに遭遇する可能性が高いです。あなたがそれに悩まされるならば、あなたはいつも特定の要求で新しい質問を投稿することができます。今すぐあなたのコードを誰かに翻訳させたいと思っているかのように見えます。 SOはそのためのものではありません。具体的な問題についてお手伝いしたいと思っていますが、あなたの側から何らかの努力をすることを合理的に期待しています。 – 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; 
関連する問題