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

レコードを使用して参照カーソルをループする方法は?

    弱い型のREFCURSORに基づいてレコード型を定義することはできません。パッケージで定義されているカーソルタイプを使用して、任意の列を持つ任意のクエリからデータを返すことができるため、PL/SQLコンパイラはデータをフェッチするための適切なレコードタイプを判別できません。

    関数から返される実際のデータがわかっている場合は、そのタイプのレコードを宣言してデータをフェッチできます。たとえば、弱い型のカーソルタイプを返す関数を宣言したが、カーソルが実際にはEMPに基づいてカーソルを返すことがわかっている場合です。 テーブルでは、データをEMP%ROWTYPEにフェッチできます レコード(SYS_REFCURSORに注意してください システム定義の弱い型のREFCURSOR型です)

    create or replace function f1
      return sys_refcursor
    is
      l_rc sys_refcursor;
    begin
      open l_rc
       for select *
             from emp;
      return l_rc;
    end;
    
    declare
      l_rc sys_refcursor;
      l_emp emp%rowtype;
    begin
      l_rc := f1;
      loop
        fetch l_rc into l_emp;
        exit when l_rc%notfound;
        dbms_output.put_line( l_emp.empno );
      end loop;
    end;
    



    1. 異なる列のタイム スタンプの違いに基づいて Oracle DB ビューを作成する

    2. Delphiデータベース対応コンポーネントの使用-長所と短所

    3. PostgreSQLでの並列unnest()とソート順

    4. ユニオンまたはジョインを使用する-何が速いか