儲存過程中慎用 execute immediate
儲存過程中慎用 execute immediate ,
execute immediate 執行DDL語句一定要小心,否則會造成資料一至性問題。
[@more@]1,
create table t1( id1 number );
2,
begin
insert into t1 values (101) ;
execute immediate ' create table t2 (id1 number ) ';
end;
/
PL/SQL procedure successfully completed
資料已經被提交,無論你是否COMMIT。
如果一個過程中有多個DML語中,中間混雜了類似的DDL動態語句,就會造成DDL之前的語句提交,儘管DDL之後的語句失敗了,最終也無法將整個事物回滾到一致性狀態。
3,
begin
insert into t1 values (101) ;
execute immediate ' alter session enable parallel dml ' ;
end;
/
ORA-12841: Cannot alter the session parallel DML state within a transaction
ORA-06512: at line 8
但是"alter session" 這個DDL 語句不能在事物中執行。 必須首先提交或回滾事物。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/350519/viewspace-1033930/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- EXECUTE IMMEDIATE 儲存過程中 許可權不足及EXECUTE IMMEDIATE的除錯避坑儲存過程除錯
- 儲存過程執行EXECUTE IMMEDIATE沒反應儲存過程
- 在儲存過程中使用EXECUTE IMMEDIATE報許可權問題儲存過程
- EXECUTE IMMEDIATE 呼叫動態過程
- 在儲存過程A中呼叫儲存過程B的結果儲存過程
- Sqlserver中的儲存過程SQLServer儲存過程
- PB中呼叫儲存過程儲存過程
- 儲存過程中拼接字串儲存過程字串
- java中呼叫儲存過程Java儲存過程
- 儲存過程中巢狀儲存過程的變數執行方式儲存過程巢狀變數
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程
- 儲存過程儲存過程
- jsp中呼叫儲存過程JS儲存過程
- java中呼叫ORACLE儲存過程JavaOracle儲存過程
- EXECUTE IMMEDIATE dynamic sql in procedureSQL
- ORACLE儲存過程中建立子過程的測試!Oracle儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- MySQL儲存過程詳解 mysql 儲存過程linkMySql儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- MySql儲存過程中limit傳參MySql儲存過程MIT
- 儲存過程中巢狀事務儲存過程巢狀
- oracle 儲存過程中螢幕列印Oracle儲存過程
- 在儲存過程中寫truncate table儲存過程
- oracle儲存過程中的陣列Oracle儲存過程陣列
- Jsp中呼叫Oracle儲存過程JSOracle儲存過程
- ADO中sqlserver儲存過程使用SQLServer儲存過程
- mssql 儲存過程呼叫另一個儲存過程中的結果的方法分享SQL儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- Oracle儲存過程Oracle儲存過程
- Mysql 儲存過程MySql儲存過程
- 使用儲存過程儲存過程
- sybase儲存過程儲存過程
- java儲存過程Java儲存過程
- 管理儲存過程儲存過程
- 呼叫儲存過程儲存過程
- 實戰儲存過程排程過程儲存過程
- 從sybase的儲存過程轉向oracle的儲存過程儲存過程Oracle
- execute immediate 語法小結