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

PL/SQLで、複数データをLOOPで
読み込む処理を行います。

TYPE T_CHR IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
vc_data T_CHR;

FOR cur_01 IN rec_01 LOOP
vc_data(1) := rec_01.SHOHIN1
vc_data(2) := rec_01.SHOHIN2
vc_data(3) := rec_01.SHOHIN3
vc_data(4) := rec_01.SHOHIN4
・・・・・
vc_data(50) := rec_01.SHOHIN50

END LOOP;

上記のような処理をしたいのですが、vc_dataに
セットする処理を、Loopでできないですか?

FOR n_count IN 1..50 LOOP
vc_data(n_count) := rec_01(n_count);
END LOOP;

のようなかんじで。。。
今は50個羅列したままです。
でも、上のような処理は、エラーでした。
rec_01は、
rec_01.SHNNO1
のように、列名を指定する以外方法はないのでしょうか?
初歩的な質問ですみませんが、よろしくおねがいします。

A 回答 (2件)

質問の意図の読み違いでしたらごめんなさい。


まず、rec_01は何かのレコードなんでしょうか?
ならばVARCHAR2型のvc_dataに変数代入はできないですよね?
この場合vc_dataを構造体にしてあげれば変数代入できるとおもいます。こんな感じで宣言してあげれば良いのでは無いでしょうか

【例】
TYPE SHOHN_TYPE IS RECODE
(
SHOHN1 VARCHAR2(30) := NULL,
SHOHN2 VARCHAR2(30) := NULL,



SHOHN50 VARCHAR2(30) := NULL);


TYPE t_SHOHN_TYPE IS TABLE OF SHOHN_TYPE INDEX BY BINARY_INTEGER;

v_SHO_NULL t_SHOHN_TYPE; -- 初期化用
v_SHO t_SHOHN_TYPE; -- 変数代入用
    • good
    • 0

こんにちは。



カーソルとレコード型がいきなり登場してくるので、詳細が不明なんですが・・・、

OPEN cur_01;
FOR n_count IN 1..50 LOOP
FETCH cur_01 INTO rec_01;
vc_data(n_count) := rec_01.SHNNO1;
END LOOP;
CLOSE cur_01;

絶対に50個と決まってるのなら、これでいいんじゃないかなぁ・・・?
(^^ゞ
    • good
    • 0

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