• 締切済み

PLSQLでフィールド名の参照について

PLSQLでフィールド名で、例えば フィールド1,フィールド2…フィールド5 とし、下記の例のように添え字でフィールドを それぞれ指定したいのですが、可能でしょうか? 出来る場合、具体的にどのようにすればいいのでしょうか? FOR i IN 1..5;  sum := sum + CALCREC01("フィールド" || i);  ↑こんな感じの事がしたい。。。 END LOOP

みんなの回答

  • 7colors
  • ベストアンサー率25% (29/114)
回答No.3

TYPE [変数名] IS TABLE OF [型名] [INDEX BY BINARY_INTEGER ←検索用INDEX(省略可)]; W_DATA [変数名]; W_TEST FOR I IN 1..5 LOOP W_TEST := W_DATA(I); END LOOP; EX) TYPE W_NUM IS TABLE OF NUMBER(10) INDEX BY BINARY_INTEGER; W_SU W_NUM; W_SUM NUMBER(12) := 0; FOR I IN 1..5 LOOP W_SUM := W_SUM + W_SU(I); END LOOP; こんな記述で可能ですね。

回答No.2

う~ん・・・、 とりあえず、PL/SQLになってないんですが・・・。 まぁ、それは置いといて、 PL/SQLではレコード型の参照をコンパイル時に解決しようとします。 この意味がわかりますか? 既存のテーブルや宣言されたレコード型(type abc as record も)の名前は、動的に変更できません。 INDEX BY表などを使ってインデックス処理にするか、動的SQLを使用して、各カラムごとにSQLを発行してください。

回答No.1

テーブルのカラムですか? cursorで取得しているのでしょうか? recordの変数に入れてるのかな? 前後がよくわからないので、いきなりフィールドが出ても・・・。

emiko0106
質問者

補足

CALCREC01というのは、カーソルのレコード型変数で、 これを使ってあるテーブルのフィールド1…5を参照しに いっていると考えてもらえたら良いと思います。 もう少し細かく書くと以下のようなコードを 想定しています。 CURSOR CALC01 is  SELECT   フィールド1,   フィールド2,   フィールド3,   フィールド4,   フィールド5  FROM テーブル; CALC01REC CALC01%ROWTYPE; FOR CALC01REC IN CALC01 LOOP  FOR i IN 1..5;   sum := sum + CALCREC01("フィールド" || i);   ↑こんな感じの事がしたい。。。  END LOOP; END LOOP;

関連するQ&A