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

カーソルパラメータoracleを使用したパイプライン関数

    カーソルは、結果セットから行をフェッチするために使用されるポインタです。

    したがって、table(test_pipe(main_cur))を実行すると 、行ソースを渡していない パイプライン関数へ 。最初に行をフェッチしてから、行ソースを渡す必要があります。

    テストケース:

    SQL> CREATE or replace TYPE target_table_row
      2  AS
      3    OBJECT
      4    ( EMPNO NUMBER(4) ,
      5      ENAME VARCHAR2(10)
      6      )
      7  /
    
    Type created.
    
    SQL>
    SQL> sho err
    No errors.
    SQL>
    SQL> CREATE or replace TYPE target_table_rows
      2  AS
      3    TABLE OF target_table_row;
      4  /
    
    Type created.
    
    SQL>
    SQL> sho err
    No errors.
    SQL>
    

    パイプライン機能

    SQL> CREATE OR REPLACE FUNCTION pipelined_fx(
      2      p_cursor IN SYS_REFCURSOR)
      3    RETURN target_table_rows PIPELINED PARALLEL_ENABLE(
      4      PARTITION p_cursor BY ANY)
      5  IS
      6  TYPE cursor_ntt
      7  IS
      8    TABLE OF emp%ROWTYPE;
      9    nt_src_data cursor_ntt;
     10  BEGIN
     11    LOOP
     12      FETCH p_cursor BULK COLLECT INTO nt_src_data LIMIT 100;
     13      FOR i IN 1 .. nt_src_data.COUNT
     14      LOOP
     15        PIPE ROW (target_table_row( nt_src_data(i).empno, nt_src_data(i).ename ));
     16      END LOOP;
     17      EXIT
     18    WHEN p_cursor%NOTFOUND;
     19    END LOOP;
     20    CLOSE p_cursor;
     21    RETURN;
     22  END pipelined_fx;
     23  /
    
    Function created.
    
    SQL>
    SQL> show errors
    No errors.
    SQL>
    

    それでは、パイプライン関数をテストしてみましょう。 :

    SQL> DECLARE
      2    rc SYS_REFCURSOR;
      3    num NUMBER;
      4  BEGIN
      5    OPEN RC FOR SELECT * FROM emp;
      6    SELECT count(*) INTO num FROM TABLE(pipelined_fx(rc));
      7    DBMS_OUTPUT.PUT_LINE( num || ' rows in total.' );
      8  END;
      9  /
    14 rows in total.
    
    PL/SQL procedure successfully completed.
    
    SQL>
    


    1. SQLでパーティション内の行をランク付けする方法

    2. SQL Serverのストアドプロシージャに渡されたVARCHARを解析するにはどうすればよいですか?

    3. OracleASエイリアスが機能しない

    4. OneToMany/null許容関係でのHibernateパフォーマンスの問題