0

Oracle データベースでの create、drop、rename、alter ステートメントの後に呼び出される暗黙的なコミットを無効にすることはできますか?

簡単な例:

CREATE TABLE TEST.test2x (id NUMBER(10,0));
ALTER TABLE TEST1.test2x ADD PRIMARY KEY (id);

これは、スキーマが間違っているため、alter ステートメントでは失敗しますが、テーブルは既に作成されています。create、alterなどを使用しているときに、この動作をバイパスして、すべてをコミットするか、何もコミットしないことは何とか可能ですか?

4

2 に答える 2

2

「全か無か」の DDL を実行する方法はありますが、非常に限定された方法 (CREATE SCHEMAステートメント) でのみ実行できます。

たとえば、次のCREATE SCHEMAステートメントは 2 つのテーブルと を作成しようとしT1ますT2。ただし、DDLT2は正しくありません。どちらのテーブルも作成されません。

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 TABLECREATE VIEWGRANT

于 2013-04-23T15:57:07.297 に答える