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

Oracleを使用してストアド関数から複数の行を取得する方法

    %ROWTYPEを実行できないSQLタイプでは、テーブルに一致するように各列を入力する必要があります*。

    *sys.anydatasetはさておき。しかし、そのルートをたどると、コーディングははるかに複雑になります。

    例えばテーブルが

    だった場合
    create table foo (id number, cola varchar2(1));
    

    次に

    create type email_queue_type is object (id number, cola varchar2(1));
    /
    create type t_email_queue_type as table of email_queue_type;
    /
    

    そのテーブルemail_queue_type_tabを関数からの出力として使用します。

    ただし、現在のコードはスケーラブルではないため、パイプライン関数をお勧めします。

    例:

    SQL> create table foo (id number, cola varchar2(1));
    
    Table created.
    
    SQL>
    SQL> create type email_queue_type is object (id number, cola varchar2(1));
      2  /
    
    Type created.
    
    SQL> create type t_email_queue_type as table of email_queue_type;
      2  /
    
    Type created.
    
    SQL> insert into foo select rownum, 'a' from dual connect by level <= 10;
    
    10 rows created.
    
    SQL>
    SQL> create or replace PACKAGE email_queue AS
      2
      3
      4    FUNCTION lock_and_get return t_email_queue_type pipelined;
      5
      6  END email_queue;
      7  /
    
    Package created.
    
    SQL> create or replace PACKAGE BODY email_queue AS
      2
      3      FUNCTION lock_and_get RETURN t_email_queue_type pipelined AS
      4        queue_obj t_email_queue_type;
      5
      6      BEGIN
      7
      8       for r_row in (select * from foo)
      9              loop
     10                pipe row(email_queue_type(r_row.id, r_row.cola));
     11              end loop;
     12
     13      END lock_and_get;
     14
     15  END email_queue;
     16  /
    
    Package body created.
    
    SQL> select * from table(email_queue.lock_and_get());
    
            ID C
    ---------- -
             1 a
             2 a
             3 a
             4 a
             5 a
             6 a
             7 a
             8 a
             9 a
            10 a
    
    10 rows selected.
    
    SQL>
    


    1. 複数のJPAトランザクションを並行して実行する

    2. ORA-00933 SQLコマンドは正しく終了していませんが、SQLDeveloperでは問題ありません

    3. psycopg2 pythonライブラリを使用し、優れた変換タイプのツールを使用してSQL動的クエリを構築する

    4. 次のコードを使用してPHPを使用してMySQLでデータベースを作成する場合、どこに接続し、どこにデータベースを作成しますか?