※ ChatGPTを利用し、要約された質問です(原文:PL/SQLで複数のFor文を解除したい)
PL/SQLで複数のFor文を解除する方法
このQ&Aのポイント
PL/SQLでFor文を複数使用したデータ作成プログラムを作っています。作成したデータが一定数に達したら全てのFor文を抜ける処理を入れたいのですが、うまくいきません。
VBのExit Functionなどのように複数のFor文を一気に抜けるやり方はPL/SQLにはあるのでしょうか?
Oracleを始めて一週間足らずの未熟者なので、ソース自体が違うかもしれませんが、どなたかご存知の方、教えてください!
PL/SQLでFor文を複数使用したデータ作成プログラムを作っています。
作成したデータが一定数に達したら全てのFor文を抜ける処理を
入れたいのですが、うまくいきません。
VBのExit Functionなどのように複数のFor文を一気に抜けるやり方は
PL/SQLにはあるのでしょうか?
ソース---------------------------------------------------------
(中略)
StrCnt := 1;
For i IN 1..3 LOOP
StrA := "あ"
For j IN 1..3 LOOP
StrB := "い"
For k IN 1..3 LOOP
StrC := "う"
outputStr := StrA || StrB || StrC ;
DBMS_OUTPUT.PUT_LINE (outputStr) ;
StrCnt := StrCnt + 1 ;
--もしStrCntが5つ作成されればデータ作成を中断
IF StrCnt > 5 THEN
※ここで全てのループを解除したい
END IF;
EXIT LOOP;
EXIT LOOP;
EXIT LOOP;
(後略)
---------------------------------------------------------------
環境は
【OS】Window2000 Pro
【Oracle】8.1.6 です。
Oracleを始めて一週間足らずの未熟者なので、ソース自体が違うかもしれませんが、
どなたかご存知の方、教えてください!
お礼
回答ありがとうございます。 早速試してみましたが、ループは一つしか抜けていないようです。 -------------------------------------------------------------------- StrNo :=1; FOR Cnt1 IN 1 .. 4 LOOP Str1 := StrArray(Cnt1); FOR Cnt2 IN 1 .. 4 LOOP Str2 := StrArray(Cnt2); FOR Cnt3 IN 1 .. 4 LOOP Str3 := StrArray(Cnt3); OutStr := Str1 || Str2 || Str3; StrNo := StrNo + 1; IF StrNo = 6 THEN DBMS_OUTPUT.PUT_LINE ('5件作成したので終了'); EXIT; END IF; END LOOP; END LOOP; END LOOP; END; / -------------------------------------------------------------------- 以上をSQL*PLUSで実行すると "5件作成したので終了"と一行だけ表示されますが、 Select count(*)で件数を確認すると61件のデータが作成されています。 strArray()には strArray(1):="あ"、strArray(2):="い" ・・・といった具合に 一文字ずつ文字データが入っています。 他に方法があるようでしたら教えてください。よろしくお願いします。
補足
すみません、よくよく見直したらIF文の条件がおかしかったです。 "IF StrNo = 6 THEN"ではなく、"IF (StrNo >= 6) THEN"にしたら 考えていた動きをしてくれました。 今度からはもっとよく考えてから質問します。 ありがとうございました!!