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

別のストアドプロシージャから参照カーソルに列を追加するストアドプロシージャを作成するにはどうすればよいですか?

    考えられる解決策の1つ(最終的には簡略化できます)は、テーブル関数を使用してカーソルを処理し、関数値を追加することです。

    sys_refcursorを返す関数がget_curと呼ばれると仮定します。 カーソルが列ID, NAMEで構成されていること (テーブル関数には型定義が必要なため、これは重要です)。

    行(追加のパス列を含む)と結果のテーブルのTYPEを宣言します。

    create type t_row is object
     ( id             number(10),
       name varchar2(10),
       path varchar2(10)
    );
    /
    
    create type t_rows is table of t_row;
    /
    

    カーソルをフェッチして関数呼び出しを追加するテーブル関数を定義します。

    create or replace function get_cur2  return 
    t_rows
    PIPELINED
    as
       cv_out     sys_refcursor;
       id   number;
       name   varchar2(100);    
    begin
          cv_out := get_cur; 
          loop 
            FETCH cv_out INTO id, name;
            exit when cv_out%NOTFOUND;
            pipe row(t_row(id,name, GetRegionPath(id)));
          end loop;
          close    cv_out;
          return;
    end;
    /
    

    これで、テーブル関数からデータを選択できます

    select * from  table(get_cur2); 
    
            ID NAME       PATH     
    ---------- ---------- ----------
             1 one        path 1     
             2 two        path 2 
    

    もちろん、このクエリを使用して、追加のパス列を含むSYS_REFCURSORを返す3番目の関数でカーソルを開くこともできます。



    1. mysqlでローカル変数とプリペアドステートメントにselectを使用する

    2. ExcelでSQLiteクエリ結果を自動的に開く

    3. 3つのマスターノードをMySQLに接続するためのConnectionString

    4. PostgreSQL列挙型をJPAおよびHibernateでマッピングする方法