Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Odbiór zwrotów z funkcji pakietowej do użytku w select

Możesz użyć obiektów SQL wewnątrz swojego pakietu lub użyć funkcji potokowych (testowane z 10gr2). Używanie obiektów SQL jest proste, twoja rzeczywista funkcja może być używana tak, jak wewnątrz pakietu.

Oto jak możesz użyć funkcji potokowej z typem 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

To, co dzieje się za kulisami, polega na tym, że Oracle rozumie, że skoro chcesz użyć swojej funkcji w zapytaniu (ze względu na słowo kluczowe PIPELINED), będziesz potrzebować obiektów SQL, więc te obiekty są tworzone za Ciebie:

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. PHP7.0-FPM z Dockerem:Nie można załadować biblioteki dynamicznej OCI8

  2. Proste przypisanie SQL zmiennej Oracle

  3. Nigdy więcej SPU

  4. Nie można załadować pliku lub zestawu „Oracle.DataAccess” 64-bitowy ODP.NET

  5. Jak połączyć wiele rzędów w jednym rzędzie, wyrocznia