0

PL/SQL の担当者が必要です。実際、オラクルがこのコードを受け入れたくない理由がわかりません:

set serveroutput on;
CREATE OR REPLACE PROCEDURE route (gagnant VARCHAR2) IS

CURSOR perdants IS SELECT NPerdant FROM RENCONTRE WHERE NGagnant = gagnant;

BEGIN
        FOR perdant IN perdants
        LOOP
                dbms.output.put_line(gagnant || ' bats ' || perdants.nperdant);
                route (perdants.nperdant);
        END LOOP;
END;
/

これは show errors コマンドの結果です:

LINE/COL     ERROR
10/17    PL/SQL: Statement ignored
10/70    PLS-00225: référence de sous-programme ou de curseur 'PERDANTS' e st hors étendue
11/17    PL/SQL: Statement ignored
11/33    PLS-00225: référence de sous-programme ou de curseur 'PERDANTS' e st hors étendue

perdantsしたがって、範囲の問題のためにカーソルにアクセスできないことがわかります。しかし、理由がわかりません。

4

2 に答える 2

2

問題のある場所は次のとおりです。

初め:

FOR perdant IN perdants
LOOP
   dbms.output.put_line(gagnant || ' bats ' || perdants.nperdant);
    route (perdants.nperdant);
END LOOP;

あなたのループ変数は ではperdantないので、 のよう perdantsに書き直す必要があります。perdants.nperdantperdant.nperdant

2番:

dbms.output.put_line(...);

パッケージ名はdbms_output.

于 2012-10-12T17:41:02.447 に答える
1

の代わりにperdant.nperdant( なしで)を使用したいと思います。それ以外の場合は、ループ変数を使用していません。sperdants.nperdantperdant

于 2012-10-12T17:39:26.573 に答える