0

out カーソル パラメータを持つプロシージャを検証する必要があります。具体的には、何が取得されているかを確認する必要があります。

私はこれを試します:

declare
  type cursor_out is ref cursor;
  cur cursor_out; 
  fila activ_economica%rowtype;
  procedure test(algo out cursor_out) is
  begin
    open algo for select * from activ_economica;  
  end;
begin
  test(cur);
  for i in cur loop
    fila := i;
    dbms_output.put(fila.id_activ_economica ||' ' );
    dbms_output.put_line(fila.nom_activ_economica);
  end loop;
end;

エラーは、「cur」が定義されていないことです。

4

1 に答える 1

2

ref カーソルでカーソル FOR ループを使用することはできません。これを行う必要があります。

declare
  type cursor_out is ref cursor;
  cur cursor_out; 
  fila activ_economica%rowtype;
  procedure test(algo out cursor_out) is
  begin
    open algo for select * from activ_economica;  
  end;
begin
  test(cur);
  loop
    fetch cur into fila;
    exit when cur%notfound;
    dbms_output.put(fila.id_activ_economica ||' ' );
    dbms_output.put_line(fila.nom_activ_economica);
  end loop;
  close cur;
end;

注: 独自の ref カーソル タイプを定義する必要はなくなりました (非常に古いバージョンの Oracle を使用している場合を除く)。代わりに SYS_REFCURSOR を使用できます。

declare
  cur sys_refcursor; 
  ...
于 2012-06-13T16:33:04.203 に答える