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

selectで使用するためにパッケージ化された関数からコレクションを返します

    パッケージ内でSQLオブジェクトを使用するか、パイプライン関数(10gr2でテスト済み)を使用できます。 SQLオブジェクトの使用は簡単で、実際の関数をパッケージ内でそのまま使用できます。

    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
    

    舞台裏で行われることは、クエリで関数を使用するため(PIPELINEDキーワードのため)、SQLオブジェクトが必要になることをオラクルが理解していることです。そのため、これらのオブジェクトは舞台裏で作成されます。

    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. taskpane.jsのMySQLドライバーモジュールからのNull参照MicrosoftOfficeアドイン

    2. SQLServerデータベースでT-SQLを使用してすべてのテーブルのすべてのインデックスを再構築する3つの方法

    3. PostgreSQL8.3以降のOLTPパフォーマンス

    4. OracleSQLDeveloper-グリッドが欠落しているクエリ結果ウィンドウ