我需要一手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
游标。
但我不明白为什么。
答案 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
。