sql >> データベース >  >> RDS >> Oracle

PLS-00221:'C1'(カーソル)がプロシージャではないか、未定義です

    明示的なカーソルが混乱しているようです。例:

    declare
      cursor cur is
      select dummy from dual;
    begin
      for rec in cur
      loop
        dbms_output.put_line(rec.dummy);
      end loop;
    end;
    /
    

    参照カーソルを使用-開いているカーソルへのポインタです。

    通常、refカーソルを使用してデータベース内のカーソルを開き、呼び出し元のアプリに戻してループさせます。

    refカーソルをoutパラメーターとして宣言し、同じ手順でそれらをループしようとした方法は意味がありません。カーソルからレコードをフェッチすると、それを再フェッチすることはできません。

    どうしても参照カーソルをループする必要がある場合は、次のような構文を使用します。

    declare
      cur sys_refcursor;
      rec dual%rowtype;
    begin
      open cur for select dummy from dual;
      loop
        fetch cur into rec;
        exit when cur%notfound;
        dbms_output.put_line(rec.dummy);
      end loop;
    end;
    /
    

    しかし、私が言ったように、一般的には、データベース内の参照カーソルをループすることはなく、呼び出し元のコードでループすることになります。

    おそらく、満たそうとしている要件で質問を更新した場合は、それを行うためのより良い方法を提案することができます。




    1. PHPとMySQLデータベースからサブカテゴリのカテゴリを表示する方法

    2. SQLServerデータベースの破損の原因と解決策を調べる

    3. mySQL繰り返しイベントクエリ

    4. リストするカンマ区切りの文字列