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

PL / SQL - thực thi ngay lập tức trong hàm pipelined

Có thể kết hợp SQL động và hàm pipelined nhưng kiểu trả về sẽ không động:số lượng và kiểu cột được trả về sẽ cố định.

Bạn có thể sử dụng EXECUTE IMMEDIATE với BULK COLLECT (cảm ơn @be ở đây ngay bây giờ ), con trỏ động hoặc DBMS_SQL để trả về nhiều hơn một hàng. Đây là một ví dụ với con trỏ động:

SQL> CREATE OR REPLACE PACKAGE pkg AS
  2     TYPE test_tab IS TABLE OF test%ROWTYPE;
  3     FUNCTION dynamic_cursor(l_where VARCHAR2) RETURN test_tab PIPELINED;
  4  END;
  5  /

Package created.

SQL> CREATE OR REPLACE PACKAGE BODY pkg IS
  2     FUNCTION dynamic_cursor(l_where VARCHAR2) RETURN test_tab PIPELINED IS
  3        cc sys_refcursor;
  4        l_row test%ROWTYPE;
  5     BEGIN
  6        OPEN cc FOR 'SELECT * FROM test WHERE ' || l_where;
  7        LOOP
  8           FETCH cc INTO l_row;
  9           EXIT WHEN cc%NOTFOUND;
 10           PIPE ROW (l_row);
 11        END LOOP;
 12        RETURN;
 13     END;
 14  END;
 15  /

Package body created.

Hãy gọi hàm động này:

SQL> SELECT *
  2    FROM TABLE(pkg.dynamic_cursor('id <= 2'));

        ID DAT
---------- ---
         1 xxx
         2 xxx

Như mọi khi với SQL động, hãy cẩn thận với SQL Injection .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để bạn thiết lập một máy chủ được liên kết với cơ sở dữ liệu Oracle trên SQL 2000/2005?

  2. Cách trả lại danh sách các lãnh thổ được hỗ trợ trong Oracle

  3. Chèn ngày từ java vào Oracle DB

  4. Cách sao chép người dùng trong Oracle

  5. ORA-1843:không phải là tháng hợp lệ trong khi cập nhật hồ sơ