PLSQLのFORALL文でSAVE EXCEPTIONS句をつける
PLSQLのFORALL文でSAVE EXCEPTIONSというオプションを付けることができます。
FORALL i IN 1..tab.COUNT SAVE EXCEPTIONS UPDATE~~~
FORALLで1000件処理した場合、どれか1件でエラーとなった場合、どのレコードがどういうエラーかわかりません。
SAVE EXCEPTIONS句をつけることにより、どういうエラーか、どの行がエラーかがわかります。
エラーなのでEXCEPTION部分に以下のように記述します。
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の大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント