2015-05-27 3 views
0

У меня есть один сценарий оболочки для запуска файла SQL, когда нам нужно запросить его для фиксации или отката в DB2. Проблема, с которой я столкнулся, - это заявление MERGE. Если SQL-скрипт имеет MERGE с оператором обновления, изменения не будут отображаться в таблице до тех пор, пока мы не зафиксируем. Но если у меня есть простой оператор UPDATE, даже без его фиксации я могу увидеть изменения в данных, используя опцию "with ur". И если сценарий, имеющий MERGE с обновлением, имеет COMMIT сразу после MERGE, мы не можем отменить изменения, поскольку они уже зафиксированы. Может ли кто-нибудь сказать, является ли COMMIT обязательным после выполнения заявления MERGE, чтобы увидеть изменения?MERGE с UPDATE и COMMIT

ответ

1

MERGE заявления в SQL не отличается от INSERT, UPDATE или DELETE, когда речь идет о выделении неподтвержденных изменений других соединений. Соединение, которое выполняло DML, всегда может увидеть свои собственные изменения до того, как они будут совершены. Чтобы просмотреть незафиксированные изменения, сделанные другим соединением («грязное чтение»), укажите незафиксированную изоляцию чтения, добавив в конец инструкции в конец инструкции SELECT.

Что касается автоматической фиксации, она может быть отключена в CLP DB2, указав -c- вариант для каждого оператора в блоке работы:

db2 -c- " UPDATE employee SET salary = 200000 WHERE empno= '000010' " 
db2 -c- " SELECT salary FROM employee WHERE empno = '000010' " 
db2 -c- " ROLLBACK " 
db2 -c- " SELECT salary FROM employee WHERE empno = '000010' "