PL/SQL プログラミングは初めてです。コード内にいくつかの DML ステートメント (挿入) を含む pl/sql プロシージャを記述しようとしました。pl/sql コードで挿入操作を実行した後、明示的なコミットを行っていません。しかし、トランザクションは pl/sql プロシージャを実行した後にコミットされています。
これはデフォルトの動作ですか?
どうすればこれを制御できますか?
PL/SQL プログラミングは初めてです。コード内にいくつかの DML ステートメント (挿入) を含む pl/sql プロシージャを記述しようとしました。pl/sql コードで挿入操作を実行した後、明示的なコミットを行っていません。しかし、トランザクションは pl/sql プロシージャを実行した後にコミットされています。
これはデフォルトの動作ですか?
どうすればこれを制御できますか?
PL/SQL Developer クライアントでは、プリファレンスを介して SQL Window トランザクションの自動コミットを制御します。
DML ステートメント (INSERT/DELETE/UPDATE/MERGE) は、PL/SQL で自動コミットを行いません。DDL ステートメントはコミットします (ALTER/CREATE など)。これは、何かが失敗した場合でも発生します。DDL を実行する動的ステートメントのような EXECUTE IMMEDIATE を実行している場合、これもトランザクションをコミットします。そしてそれは2000年以来ずっと[そしてこれからも]続く
SQL*Plus などのクライアント インターフェイスには、オフ/オンにできる自動コミット機能があります。クライアントのドキュメントで確認してください。何かのようなもの
SET AUTOCOMMIT OFF
この変数の現在のステータスを確認できます
SHOW AUTCOMMIT
そしてそれは on/off かどうかを教えてくれます。
自動コミットのその他のバリエーションについては、これを参照してください