かまたま日記3

プログラミングメイン、たまに日常

PLSQLをスマートに書こう

現在会社でPLSQLを使った開発案件に参加しています。
初めての言語なので四苦八苦しながらプログラミングしているのでそこで考えたことを記録

<PLSQLではユーザー定義のレコード型をDB全体で共有できない?>
作成したパッケージの内容が肥大化してきたので細かい機能別にパッケージを分けようとしました。
そのときネックになったのが各処理同士のインターフェースである
ユーザー定義レコードを複数パッケージで共有できないことでした。

(例)
 以下のような処理で検索処理を外部パッケージに移植した際に、searchファンクションの戻り値のカーソルを
 外部パッケージと共有できませんでした。<イメージ>

  create or replace PKG_A is
    -- レコード定義
    type rec_type is record(
      rowA,
      rowB,
      …
    )
    -- カーソル定義
    type cur_type is ref cursor return rec_type;
  
    -- メイン処理
    procedure main is
     cur cur_type
    begin
     cur := search;
     write(cur);
    end;
  
    -- 検索処理、カーソルをオープンして返す
    function search return cur_type is
      …
    end;
  
    -- 書き込み処理、カーソルをまわしてファイルに書き込む
    procedure write(cur in cur_type) is
      …
    end;
  end;
  /

時間がなくなったので続きはまた明日書きます。