PLSQLのFORALL文でSAVE EXCEPTIONS句をつける
PLSQLのFORALL文でSAVE EXCEPTIONSというオプションを付けることができます。
1 2 |
FORALL i IN 1..tab.COUNT SAVE EXCEPTIONS UPDATE~~~ |
FORALLで1000件処理した場合、どれか1件でエラーとなった場合、どのレコードがどういうエラーかわかりません。
SAVE EXCEPTIONS句をつけることにより、どういうエラーか、どの行がエラーかがわかります。
エラーなのでEXCEPTION部分に以下のように記述します。
1 2 3 4 5 6 7 8 9 |
EXCEPTION WHEN IF SQLCODE = -24381 THEN FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP errMsg := SQLERRM(-(SQL%BULK_EXCEPTIONS(i).ERROR_CODE)); bad_line := SQL%BULK_EXCEPTIONS(i).ERROR_INDEX; EXIT; --1件のみ出力 END LOOP; END IF; |
errMsgにはORA-xxxxxというようなコードが入ります。
bad_lineには行数が入ります。
上記の例では1件出力して終了しています。
ちなみにFORALLで1000件処理し、501件目でエラーが出た場合、500件目まではコミットされます。

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
資格:少額短期保険募集人,FP3級