- 締切済み
PLSQLでフィールド名の参照について
PLSQLでフィールド名で、例えば フィールド1,フィールド2…フィールド5 とし、下記の例のように添え字でフィールドを それぞれ指定したいのですが、可能でしょうか? 出来る場合、具体的にどのようにすればいいのでしょうか? FOR i IN 1..5; sum := sum + CALCREC01("フィールド" || i); ↑こんな感じの事がしたい。。。 END LOOP
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- 7colors
- ベストアンサー率25% (29/114)
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; こんな記述で可能ですね。
- taka451213
- ベストアンサー率47% (436/922)
う~ん・・・、 とりあえず、PL/SQLになってないんですが・・・。 まぁ、それは置いといて、 PL/SQLではレコード型の参照をコンパイル時に解決しようとします。 この意味がわかりますか? 既存のテーブルや宣言されたレコード型(type abc as record も)の名前は、動的に変更できません。 INDEX BY表などを使ってインデックス処理にするか、動的SQLを使用して、各カラムごとにSQLを発行してください。
- taka451213
- ベストアンサー率47% (436/922)
テーブルのカラムですか? cursorで取得しているのでしょうか? recordの変数に入れてるのかな? 前後がよくわからないので、いきなりフィールドが出ても・・・。
補足
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;