0

プロシージャを使用する単純な PL/SQL プログラムを実行しようとすると、上記のエラーが発生します。何が悪かったのかわかりません、助けてください。

declare
    create or replace procedure palindrome (x in number,y out number) is
    i integer;
    j integer;
    k integer:=0;
begin
    i:=x;
    while i>0
    loop
        j:=mod(i,10);
        k:=k*10+j;
        i:=i/10;
    end loop;
    y:=k;
end;
begin
    x integer:=121;
    y integer;
    palindrome(x,y);
    dbms_output.put_line(y);
end;

/ 2 行目のエラー:

ORA-06550: 行 2、列 2: PLS-00103: 次のいずれかを期待しているときに、シンボル "CREATE" が検出されました: begin function pragma procedure subtype type current cursor delete exists before

4

2 に答える 2

0

DECLARE変数宣言を含む無名 PL/SQL ブロックを作成する場合にのみ必要です。名前付きのプロシージャ/関数/パッケージを作成する場合、CREATE OR REPLACE ...ステートメントはDECLARE. そのステートメントと対応するステートメントの間にあるものBEGINは、宣言セクションと呼ばれます。

別のPL/SQL無名ブロックでコールできる名前付きプロシージャを作成しようとしているかどうかは特に明確ではありません。その場合は、次のようにします。

create or replace procedure palindrome (x in number,y out number) is
    i integer;
    j integer;
    k integer:=0;
begin
    i:=x;
    while i>0
    loop
        j:=mod(i,10);
        k:=k*10+j;
        i:=i/10;
    end loop;
    y:=k;
end;
/

declare
    x integer := 121;
    y integer;
begin
    palindrome(x,y);
    dbms_output.put_line(y);
end;
/

または、匿名の PL/SQL 内でプロシージャを宣言しようとしている場合は、次のようにします。

declare
    x integer := 121;
    y integer;

    procedure palindrome (x in number, y out number) is
        i integer;
        j integer;
        k integer := 0;
    begin
        i := x;
        while i > 0
        loop
            j := mod(i,10);
            k := k*10 + j;
            i := i/10;
        end loop;
        y := k;
    end palindrome;
begin
    palindrome(x,y);
    dbms_output.put_line(y);
end;
/
于 2015-08-13T11:47:29.110 に答える