PLS / QL:讨厌的游标错误

时间:2012-10-12 16:48:51

标签: sql oracle plsql cursor

我需要一手PL / SQL。实际上,我无法弄清楚为什么Oracle不想接受这个代码:

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游标。 但我不明白为什么。

2 个答案:

答案 0 :(得分:2)

这是有问题的地方:

首先:

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

您的循环变量为perdant而不是perdants,因此您应该将perdants.nperdant重写为 perdant.nperdant

第二

dbms.output.put_line(...);

包名称为dbms_output

答案 1 :(得分:1)

我认为您要使用perdant.nperdant(不使用s)而不是perdants.nperdant。否则,您没有使用循环变量perdant