• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PL/SQLの動的SQLで複数の項目を取得する方法教えて下さい。)

PL/SQLの動的SQLで複数の項目を取得する方法

このQ&Aのポイント
  • PL/SQLで複数の項目を取得する方法について教えてください。
  • 現在、動的SQLを用いて一つの項目しか取得することができません。他の方法でもよいので、複数の項目を取得する方法を教えてください。
  • DBMS_SQLパッケージを利用する方法がおすすめです。具体的には、DBMS_SQL.COLUMN_VALUEを使用して複数の項目を取得することができます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

複数項目の受け取りは、 declare sql_stmt varchar2(200); wk_name varchar2(30); wk_addr varchar2(50); type cursor_type ~; cur_name cursor_type; begin open cur_name for 'select 名前,住所 from 社員表'; loop fetch cur_name into wk_name,wk_addr; dbms_output.put_line('NAME='||wk_name); dbms_output.put_line('ADRS='||wk_adrs); end loop; close cur_name; end; のように、複数の項目を記述することで、何の問題もありません。 ただし、今回の例のような条件式で、比較条件値を可変にするようなケースでは、 動的SQLを使う意味はありません。静的SQLで実現可能です。 動的SQLを必要とするのは、オラクルの静的オブジェクト(テーブル,ビュー,項目)を 可変要素とする場合と考えてください。 (例えば、自分が所有する全ての表のレコード件数を調べる等) 静的SQLで書く場合の例: declare wk_name varchar2(30); wk_addr varchar2(50); cursor cur_name (wk_grp) is select 名前 from 社員表 where 所属グループ=wk_grp; begin open cur_name('1U'); loop fetch cur_name into wk_name; dbms_output.put_line('NAME='||wk_name); end loop; close cur_name; end; >下記のようなDBMS_SQLパッケージ??を利用した方法が・・ DBMS_SQLパッケージは、動的SQLを投げる場合に、 ・execute imediate ~ ・動的なカーソル で困る場合に使うと良いと思います。 例えば、投げるSQLが動的に決定され、受け取る項目の数やデータ属性が 不明な時に有用です。 動的なカーソルのFETCH文では、受け取る項目の数やデータ属性が、 静的になりますので、あらかじめ決まった要素しか受け取れません。 とても、汎用的な使い方の出来るDBMS_SQLパッケージですが、 取扱が面倒なので、避けれるなら避けた方が”吉”だと思います。 ※投稿中のPL/SQLロジックは、エラー処理を端折っています。(ご注意ください)

kei161220
質問者

お礼

丁寧なご回答ありがとうございました。 参考書にはDBMS_SQLパッケージのやり方しか 記載がないので、とても役に立ちそうです。 fetch into~のあとに複数の変数項目を セットすれば取得できるってことですね。 DBMS_SQLパッケージとどちらを使っていくほうが いいかは、自分で身につけていきたいと 思います。ありがとうございました。