Oracle - выполнить несколько файлов sql в транзакции - PullRequest
2 голосов
/ 04 декабря 2011

У меня есть несколько файлов sql. Мне нужно выполнить их в транзакции. При возникновении ошибки все изменения будут отменены.

Возможно ли это с помощью sqlplus или другого инструмента?

РЕДАКТИРОВАТЬ В этих файлах нет явных коммитов, просто DDL sql.

Ответы [ 3 ]

3 голосов
/ 04 декабря 2011

Обычно: возможно ли это, зависит исключительно от содержимого файлов SQL - например:

  • есть ли явные COMMIT с?
  • задействованы ли какие-либо хранимые процедуры?
  • есть ли команды DDL?
  • задействованы ли ссылки на БД?

и т.д..

Если вы не знаете / не контролируете содержимое файлов SQL, я бы сказал, нет ..

ЕСЛИ вы можете убедиться, что файлы не содержат COMMIT, никаких DDL, вызовов хранимых процедур и т. Д. ТОГДА вы можете просто объединить их и выполнить их в одной транзакции ... как это сделать, зависит от того, на вашем инструменте ...

UPDATE - после того, как OP добавил, что файлы SQL содержат команду DDL:

Ответ НЕТ, поскольку в командах DDL используется неявное COMMIT - хотя некоторые БД могут допускать некоторый «обходной путь» (например, в Oracle есть настраиваемая «область обратной связи», которую можно «злоупотреблять» для достижения того, чего вы хотите) но большинство этого не делают.

Обычный способ решить эту проблему (сценарии / транзакции DDL) - написать 2 сценария - один для внесения всех изменений ... и второй для запуска только в случае возникновения ошибки при выполнении первого ... как именно написание таких сценариев зависит от специфики вашей ситуации.

1 голос
/ 04 декабря 2011

В Oracle каждая команда DDL (язык определения данных), такая как CREATE ..., ALTER ... или DROP ..., неявно фиксируется до и после оператора. Так как ваши SQL-файлы содержат такие операторы, вы не можете иметь одну транзакцию для них всех.

Это не ограничение использования нескольких файлов. Это ограничение всех операторов Oracle DDL.

1 голос
/ 04 декабря 2011

Используйте команду start и всякий раз, когда sqlerror , тогда просто не фиксируйте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...