2013-02-25 129 views
0

我在做一個聲明,要求我執行一個包,執行sql然後提交。未提交的sql語句會發生什麼?

SQL的執行是決定它是否成功,並且我正在檢查受影響的sql代碼行的編號。如果它的任何東西,但1提交(一個單獨的命令)永遠不會運行。

其他兩個命令會發生什麼,就像我說過的,我在執行一個包的時候執行了一個命令,sql本身在兩個命令中?

+0

你用ODBC連接嗎?如果是,您是使用默認設置還是顯式事務管理? – APC 2013-02-25 12:45:39

回答

2

如果沒有COMMITROLLBACK語句,則會話結束時會回滾工作。

一些詳細的解釋,你會發現在Transation Management Doc

UPDATE APC是正確的,DOC是更具體的比我:

任何時候發生以下事務結束:

用戶發出沒有SAVEPOINT 子句的COMMIT或ROLLBACK語句。

用戶運行DDL語句,如CREATE,DROP,RENAME或ALTER。如果 當前事務包含任何DML語句,則Oracle Database 首先提交該事務,然後運行並提交DDL 語句作爲新的單一語句事務。

用戶從Oracle數據庫斷開連接。目前的交易是承諾的 。

用戶進程異常終止。當前交易回滾爲 。

注意:應用程序應該總是在程序終止之前顯式提交或撤銷事務。

所以,我沒有真正回答你的問題。這取決於你的連接器在退色時所做的事情。

+0

它也取決於工具如何操作。 Oracle SQL開發人員詢問您何時要退出 - 是否要提交或回滾。 sqlplus在COMMIT退出時已知。也許SQL開發人員在模擬腳本模式時也會這樣做...... – igr 2013-02-25 09:25:42

+0

是的,該工具可能會改變**正常**出口處的行爲。看到一個討論[這裏](http://stackoverflow.com/questions/1368092/why-does-sqlplus-commit-on-exit)。但我認爲他製作的工具,因爲這個問題是用C#標記:) – 2013-02-25 09:39:06

+0

對不起,但這個答案太簡單了。即使您鏈接到Oracle的文檔也表示,如果用戶斷開連接,Oracle將提交事務,除非它會在回滾時異常終止。 – APC 2013-02-25 12:43:57