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

Trả lại bộ sưu tập từ chức năng đóng gói để sử dụng trong lựa chọn

Bạn có thể sử dụng các đối tượng SQL bên trong gói của mình hoặc sử dụng các hàm pipelined (được thử nghiệm với 10gr2). Việc sử dụng các đối tượng SQL rất đơn giản, chức năng thực tế của bạn có thể được sử dụng như bên trong một gói.

Đây là cách bạn có thể sử dụng một hàm pipelined với loại RECORD:

SQL> CREATE OR REPLACE PACKAGE my_pkg IS
  2     TYPE t_col IS RECORD(
  3        i NUMBER,
  4        n VARCHAR2(30));
  5     TYPE t_nested_table IS TABLE OF t_col;
  6     FUNCTION return_table RETURN t_nested_table PIPELINED;
  7  END my_pkg;
  8  /

Package created
SQL> CREATE OR REPLACE PACKAGE BODY my_pkg IS
  2     FUNCTION return_table RETURN t_nested_table PIPELINED IS
  3        l_row t_col;
  4     BEGIN
  5        l_row.i := 1;
  6        l_row.n := 'one';
  7        PIPE ROW(l_row);
  8        l_row.i := 2;
  9        l_row.n := 'two';
 10        PIPE ROW(l_row);
 11        RETURN;
 12     END;
 13  END my_pkg;
 14  /

Package body created

SQL> select * from table(my_pkg.return_table);

         I N
---------- ------------------------------
         1 one
         2 two

Điều gì xảy ra đằng sau hiện trường là Oracle hiểu rằng vì bạn muốn sử dụng hàm của mình trong một truy vấn (vì từ khóa PIPELINED), bạn sẽ cần các đối tượng SQL, vì vậy những đối tượng đó được tạo sau cảnh cho bạn:

SQL> select object_name
  2    from user_objects o
  3   where o.created > sysdate - 1
  4     and object_type = 'TYPE';

OBJECT_NAME
--------------------------------------------------------------------------------
SYS_PLSQL_798806_24_1
SYS_PLSQL_798806_DUMMY_1
SYS_PLSQL_798806_9_1

SQL> select text from user_source where name='SYS_PLSQL_798806_9_1';

TEXT
--------------------------------------------------------------------------------
type        SYS_PLSQL_798806_9_1 as object (I NUMBER,
N VARCHAR2(30));


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Mutating Trigger

  2. Thời gian thực hiện truy vấn Oracle

  3. Công cụ báo cáo từ điển dữ liệu

  4. Làm cách nào để đặt LINESIZE và PAGESIZE bằng một biến thay thế?

  5. có chức năng nào để dịch dữ liệu trong sql không