Простой сценарий, в котором эффект команды ROLLBACK не наблюдается в Oracle 9i. - PullRequest
0 голосов
/ 03 ноября 2011

Предположим, в командной строке SQL в Oracle 9i я создаю простую таблицу, скажем orderStatus , содержащую только два столбца с помощью следующей команды CREATE SQL.

CREATE TABLE orderStatus(statusID varchar2(6) primary key, status varchar2(15));

только тогда я ввожу четыре строки со следующими командами INSERT INTO.

INSERT INTO orderStatus VALUES("S0001", "Fulfilled");

INSERT INTO orderStatus VALUES("S0002", "Back order");

INSERT INTO orderStatus VALUES("S0003", "In process");

INSERT INTO orderStatus VALUES("S0004", "Cancelled");

При успешном выполнении вышеуказанных команд я запускаю команду COMMIT для завершения текущей транзакции.

COMMIT;

только тогда мне нужно запустить следующую команду DELETE.

DELETE FROM orderStatus WHERE statusID="S0004";

, которая удаляет одну строку с идентификатором состояния S0004.Теперь таблица содержит только 3 строки.


Предположим, мне нужно добавить ограничение NOT NULL в столбец состояния, для которого требуется следующая команда ALTER TABLE.

ALTER TABLE orderStatus MODIFY(status varchar(15) NOT NULL);

ТаблицаБудет изменено значение orderStatus, чтобы добавить ограничение NOT NULL в столбец состояния.


Теперь предположим, что в командной строке SQL я выполняю команду ROLLBACK, которая приводит к завершению текущей транзакции всеми данными, которые были ранее.затронутые в этой таблице будут отменены.При этом ранее удаленная строка с командой DELETE, приведенной выше, должна быть отменена, и таблица должна теперь содержать четыре исходные строки, но эффект ROLLBACK не может быть соблюден, и таблица будет иметь только три строки.Почему это происходит?

1 Ответ

4 голосов
/ 03 ноября 2011

DDL (например, CREATE TABLE и ALTER TABLE) выдает неявное принятие до выполнения оператора и после его завершения. Вы не можете откатить DDL, и вы не можете откатить изменения DML (например, DELETE) после неявной фиксации, вызванной вашими причинами DDL.

Вот почему вы обычно не хотите смешивать DDL и DML.

...