Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

hàm pipelined với oracle tham số con trỏ

Con trỏ là một con trỏ được sử dụng để tìm nạp các hàng từ một tập kết quả.

Vì vậy, khi bạn thực hiện table(test_pipe(main_cur)) , bạn không vượt qua nguồn hàng đến chức năng pipelined . trước tiên bạn cần tìm nạp các hàng và sau đó chuyển nguồn hàng.

Trường hợp thử nghiệm:

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>

Chức năng đường ống

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>

Bây giờ, hãy kiểm tra chức năng pipelined :

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xóa các tệp khỏi một thư mục trong quy trình được lưu trữ oracle

  2. Đánh giá ngắn mạch CASE và COALESCE hoạt động với trình tự trong PL / SQL nhưng không hoạt động trong SQL

  3. Tối ưu hóa truy vấn Oracle

  4. jBPM 6.5 + Tomcat 8 + Giao dịch Bitronix + Cấu hình Oracle 11G | Không thể cam kết phiên java.lang.NullPointerException

  5. tìm nạp dữ liệu bằng rownum trong oracle