◆Oracle-SQL-エラーない場合のみコ

Oracle-SQL-エラーない場合のみコミットする方法教えてください◆◆Oracle-SQL-エラーない場合のみコミットする方法教えてください◆ 初歩的質問で申し訳ないのですがご教授下さい。

 

※1のような、複数行のSQL文を一括実行し、全てのレコードがエラー発生無い場合のみコミット処理をして、

1行でもエラーがある場合全てをロールバックしたいのですが。

どのようにすれば良いのでしょうか。。

 

■DB Oracle9i Enterprise Edition Release 9.2.0.1.0

 

※1

INSERT INTO TT_売上明細( 売上番号, 明細番号, 商品コード, 売上数量) VALUES( 6, 4, 1, 1);

INSERT INTO TT_売上明細( 売上番号, 明細番号, 商品コード, 売上数量) VALUES( 7, 4, 2, 2);

INSERT INTO TT_売上明細( 売上番号, 明細番号, 商品コード, 売上数量) VALUES( 8, 4, 3, 3);zenchan_voovさん

 

回答有難う御座います!

PL/SQLは使わずに実行します。SQLPlusやObjectBrowserなどの直接OracleDBインタフェースツールみたいなものを利用して行う場合でしたら、

上手く更新された場合のカウントを伝えるメッセージなりで表示があるとおもうのですが、

その際に、実行SQL件数分の更新とならなかったら、ロールバックを行い、SQL件数分の更新がなされたのでしたら、コミットを実行すればいいわけなのですけども・・・

 

何かしらのPGからの実行となる場合でしたら、SQLが上手いこと更新されたかどうかの戻り値を受け取ることが可能だと思うので総件数分のちゃんと更新されたか否かの判定処理を設けてコミットなりロールバックを実行すればいいわけなのです。

 

実際上述SQLの実行をどういう条件下において行うのかを明確にしておくとピンポイントの回答が得やすいかもしれませんね。

 

ここからは、ご参考までにどうぞ。

基本INSERTやDELETE、UPDATE文でのテーブル更新となる際には、OracleDBの仕組み上、トランザクショントランザクションはデータ更新を行おうとした人達それぞれに、テーブルデータのコピーが作成されてそこに変更を加えるというイメージですね)が発生します。コミットやロールバックはそのトランザクションを有効にするかしないかの判断(テーブルのコピーに編集を行った結果をDBへアップさせる場合ならコミット、させない場合ならロールバック)となるのです。明示的にコミットやロールバックを行わない場合、Oracleサーバにてこれらの設定が可能になるのですが、初期設定では確かロールバックとなるようで基本コミットを明示的にしなければ、データ反映はされないということになるようです。

 

補足ですが、上述のSQLを発行して、コミット及びロールバックを行わないままの状態で、SELECT文を発行した場合は、いかのもちゃんとデータが追加されたような結果を得ることができるのですが、他の端末からSELECT文を発行した場合には、INSERT前の状態のデータが取得されます。