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

第二:

dbms.output.put_line(...);

包名是dbms_output.

于 2012-10-12T17:41:02.447 回答
1

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

于 2012-10-12T17:39:26.573 回答