dポイントプレゼントキャンペーン実施中!

PLSQLでフィールド名で、例えば
フィールド1,フィールド2…フィールド5
とし、下記の例のように添え字でフィールドを
それぞれ指定したいのですが、可能でしょうか?
出来る場合、具体的にどのようにすればいいのでしょうか?

FOR i IN 1..5;
 sum := sum + CALCREC01("フィールド" || i);
 ↑こんな感じの事がしたい。。。
END LOOP

A 回答 (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;

こんな記述で可能ですね。
    • good
    • 0

う~ん・・・、


とりあえず、PL/SQLになってないんですが・・・。

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

テーブルのカラムですか?


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;

補足日時:2005/12/27 12:35
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す