金倉資料庫KingbaseES PLSQL 支援語句級回滾
KingbaseES預設如果在PLSQL-block 執行過程中的任何SQL 語句導致錯誤,都會導致該事務的所有語句都被回滾,而Oracle 則是語句級的回滾。KingbaseES 為了更好的與 Oracle相容,新增引數ora_statement_level_rollback 。當 ora_statement_level_rollback 為 on時,表示啟用了語句級的回滾。
1、Oracle 與 KingbaseES 的差異
Oracle :在遇到 exception 時,只有觸發異常的操作被回滾。
SQL> create table t(id integer); Table created. SQL> begin 2 insert into t values(123); 3 insert into t values('a'); 4 exception 5 when others then 6 commit; 7 end; 8 / PL/SQL procedure successfully completed. SQL> select * from t; ID ---------- 123
KingbaseES : 未啟用語句級回滾。
test=# create table t(id integer);CREATE TABLEtest=# begintest-# insert into t values(123);test-# insert into t values('a');test-# exceptiontest-# when others thentest-# commit;test-# end;test-# /ANONYMOUS BLOCKtest=# select * from t; id----(0 rows)
2、啟用語句級回滾
設定語句級回滾後,其行為與oracle 一致。
test=# set ora_statement_level_rollback=on;SETtest=# begintest-# insert into t values(123);test-# insert into t values('a');test-# exceptiontest-# when others thentest-# commit;test-# end;test-# /ANONYMOUS BLOCKtest=# select * from t; id ----- 123(1 row)
注意,PLSQL 的語句級回滾只發生在異常被正確捕獲的場景下才有效,如果exception 沒有被捕獲或沒有捕獲exception,則還是整個事務回滾。如以下例子:
test=# set ora_statement_level_rollback=on;test=# delete from t;DELETE 1test=# begintest-# insert into t values(123);test-# insert into t values('a');test-# exceptiontest-# when no_data_found thentest-# commit;test-# end;test-# /ERROR: invalid input syntax for type integer: "a"LINE 1: insert into t values('a')QUERY: insert into t values('a')CONTEXT: PL/SQL function inline_code_block line 3 at SQL statementtest=# select * from t; id----(0 rows)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70004805/viewspace-2942993/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 金倉資料庫KingbaseES儲存過程 RETURN語句資料庫儲存過程
- CYQ.Data 支援 KingbaseES人大金倉資料庫資料庫
- 金倉資料庫KingbaseES等待事件之LWLock lock_manager資料庫事件
- 解決金倉資料庫KingbaseES V8R3叢集故障報錯的問題資料庫
- 國產資料庫oceanBbase,達夢,金倉與mysql資料庫的效能對比 九、python讀金倉資料庫資料庫MySqlPython
- 【資料庫】SQL語句資料庫SQL
- 資料庫操作語句資料庫
- Oracle 資料回滾Oracle
- 國產資料庫oceanBbase,達夢,金倉與mysql資料庫的效能對比 五、python讀mysql寫入金倉資料庫資料庫MySqlPython
- 資料庫升級之-Dataguard滾動升級資料庫
- oracle資料庫常用語句Oracle資料庫
- 資料庫查詢語句資料庫
- 資料庫常用sql 語句資料庫SQL
- Oracle資料庫語句大全Oracle資料庫
- 資料庫SQL拼接語句資料庫SQL
- 資料庫語句練習資料庫
- ORACLE 資料庫 查詢語句與DML語句Oracle資料庫
- 資料庫高回滾爭用的問題資料庫
- 1.4 資料庫和常用SQL語句(正文)——MySQL資料庫命令和SQL語句資料庫MySql
- PLSQL學習——控制語句SQL
- 2.5 指定資料庫建立語句資料庫
- 資料庫的檢索語句資料庫
- 資料庫常用操作SQL語句資料庫SQL
- SQL資料庫連線語句SQL資料庫
- 檢視資料庫啟動以來回滾率資料庫
- 使用 Flash Table 回滾資料
- SQL語句在oracle資料庫中的初級應用(上)SQLOracle資料庫
- PostgreSQL10.0preview功能增強-回滾範圍可精細控制(事務、語句級)SQLView
- mysql資料庫語句自動生成MySql資料庫
- mysql導資料庫用到的語句MySql資料庫
- Oracle 資料庫監控SQL語句Oracle資料庫SQL
- mysql資料誤刪後的資料回滾MySql
- 【Oracle 12c資料庫支援閃回庫功能】實驗Oracle資料庫
- 2.4 使用 CREATE DATABASE 語句建立資料庫Database資料庫
- 資料庫常用的sql語句彙總資料庫SQL
- mysql資料庫重新命名語句分享MySql資料庫
- oracle-資料庫- insert 插入語句Oracle資料庫
- 資料庫常用的sql語句大全--sql資料庫SQL