- 締切済み
pro*cによるdml文のトランザクションについて
pro*cを使ってoracle 10g へinsert処理を行った際の戻り値はコミット処理が終わってから生成されるのかチェックポイントを発生させてから返されるのかどちらになるかわかる方いらっしゃいましたらご教授ねがいます。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- muyoshid
- ベストアンサー率72% (230/318)
回答No.2
こんにちわ。 #1 のmuyoshid です。 > 暗黙コミットが走っていると思いますから、 DDL 文発行時は暗黙コミットが実行されますが、DML 文発行時は 暗黙コミットは実行されません。 SQL*Plus はEXIT 時に未コミットのトランザクションはコミット されますが・・・。 > インサート処理終了後、・・・データの射影が出来ず・・・ 未コミットのデータは、他のトランザクションから読み取る事はできません。 これを、読取り一貫性と言います。
- muyoshid
- ベストアンサー率72% (230/318)
回答No.1
こんにちわ。 > insert処理を行った際の戻り値は・・・ INSERT 文, COMMIT 文それぞれに戻り値があります。 INSERT + COMMIT の両方が成功して、処理が成功と言う事になるのでは?
補足
早速のご回答有難うございます。 insert処理後に明示的なコミットをソフトウェア上では、暗黙コミットが走っていると思いますから、exec sql以降は行っておりません。 質問の経緯を申しますと、まずC言語で作成されたプログラムが2つあります。これを仮にプロセスa,プロセスbとします。 プロセスaでは管理テーブルにデータを1行インサートします。 プロセスaで発行したインサートでは明示的にコミット処理を行っていません。インサート処理終了後、プロセスaは、プロセスbをキックして終了します。プロセスbでは管理テーブルから登録の有無をチェックします。処理フロー上当然プロセスbには管理情報を取得できると思っていたのですが、データの射影が出来ず例外処理が走った・・といった感じになってしまったのです。 このような事象が発生するということは、戻り値自体はあくまでinsert処理完了後に返されるということになるのではないでしょうか?