3

Oracle 11g でセーブポイントを作成しようとしています。

ALTER TABLE ORDERS
DISABLE CONSTRAINT ORDERS_C_ID_FK;

DELETE FROM CUSTOMER;

SELECT * FROM CUSTOMER;

ROLLBACK;

SELECT * FROM CUSTOMER;

SAVEPOINT SAVEPOINT1;

ALTER TABLE ORDERS
DISABLE CONSTRAINT ORDERS_OS_ID_FK;

ALTER TABLE ORDER_LINE
DISABLE CONSTRAINT ORDER_LINE_O_ID_FK;

TRUNCATE TABLE CUSTOMER;
TRUNCATE TABLE ORDER_SOURCE;
TRUNCATE TABLE ORDERS;
DELETE FROM ORDERS;

ROLLBACK TO SAVEPOINT1;

しかし、SQL Developerからこのエラーが発生し続けます

ROLLBACK TO SAVEPOINT1 エラー レポート: SQL エラー: ORA-01086: セーブポイント 'SAVEPOINT1' がこのセッションで確立されていないか、無効です 01086. 00000 - "セーブポイント '%s' が確立されていません"確立されることはありませんでした。*アクション:

4

1 に答える 1

6

DDLステートメントALTER TABLE(TRUNCATE TABLEこの場合は) は、実行の前後に暗黙のコミットを発行します。セーブポイントが作成されたトランザクションは、最初のALTER TABLEステートメントが実行される前に終了しました。現在のトランザクションで定義されたセーブポイントにしかロールバックできないため、DDLステートメントの発行後にセーブポイントにロールバックすることはできません。

于 2012-11-21T03:24:17.917 に答える