是否可以停用在Oracle數據庫上創建,刪除,重命名和更改語句之後調用的隱式提交?可能停用Oracle上的隱式提交嗎?
簡單的例子:
CREATE TABLE TEST.test2x (id NUMBER(10,0));
ALTER TABLE TEST1.test2x ADD PRIMARY KEY (id);
因爲架構是錯誤的,但現在已經創建了表這將失敗的ALTER語句。 那麼是否有可能繞過這種行爲,只使用create,alter等方法提交全部或全部內容?
是否可以停用在Oracle數據庫上創建,刪除,重命名和更改語句之後調用的隱式提交?可能停用Oracle上的隱式提交嗎?
簡單的例子:
CREATE TABLE TEST.test2x (id NUMBER(10,0));
ALTER TABLE TEST1.test2x ADD PRIMARY KEY (id);
因爲架構是錯誤的,但現在已經創建了表這將失敗的ALTER語句。 那麼是否有可能繞過這種行爲,只使用create,alter等方法提交全部或全部內容?
您可以在plsql「begin/end」塊內運行這些命令。然後捕捉並處理錯誤。
即。
begin
execute immediate 'create table xyz (x number)';
execute immediate 'alter table bad.xyz add';
exception
when others then
execute immediate 'drop table xyz';
end;
有辦法做到「全有或全無」的DDL,但只有在非常有限的方式 - CREATE SCHEMA
聲明。
例如,以下CREATE SCHEMA
語句嘗試創建兩個表,即T1
和T2
。但是,T2
的DDL不正確。這兩個表都不會被創建。
SQL> REM Verify the tables do not already exist.
SQL> SELECT * FROM T1;
SELECT * FROM T1
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> SELECT * FROM T2;
SELECT * FROM T2
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> CREATE SCHEMA AUTHORIZATION TEST
2 CREATE TABLE T1
3 (
4 X NUMBER PRIMARY KEY
5 )
6 CREATE TABLE T2
7 (
8 -- Try to reference a column that does not exist.
9 X NUMBER REFERENCES T1(Y)
10 );
X NUMBER REFERENCES T1(Y)
*
ERROR at line 9:
ORA-02428: could not add foreign key reference
ORA-00904: "Y": invalid identifier
SQL> REM Verify the tables still don't exist.
SQL> SELECT * FROM T1;
SELECT * FROM T1
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> SELECT * FROM T2;
SELECT * FROM T2
*
ERROR at line 1:
ORA-00942: table or view does not exist
然而,CREATE SCHEMA
是有限的,因爲它僅支持CREATE TABLE
,CREATE VIEW
和GRANT
語句。
[在事務中包裝Oracle模式更新](http://stackoverflow.com/questions/59303/wrap-an-oracle-schema-update-in-a-transaction)以及http:/ /stackoverflow.com/questions/730621/do-ddl-statements-always-give-you-an-implicit-commit-or-can-you-get-an-implicit?rq=1 – Thilo 2013-04-23 08:58:52
不,你不能讓DDL交易在Oracle中。 – 2013-04-23 11:31:04