2014-12-04 2 views
0

im использовать Liquibase для управления моей базой данных в SQLdeveloper. Теперь у нас есть сценарий PLSQL, который отлично работает сам по себе. Он также вносит изменения в базу данных. Теперь, если мы хотим, чтобы Liquibase запускала этот PLSQL-скрипт, он получает следующую ошибку: ORA-00922: отсутствует или недействительный параметр.Запустить внешний скрипт PLSQL с Liquibase

Возможно ли, чтобы Liquibase запускала внешние скрипты PLSQL?

+0

Пожалуйста, покажите нам код хранимой процедуры –

+0

Чтобы ответить на ваш вопрос очень лаконично, да, Liquibase может запускать внешний PLSQL. Одна вещь, о которой нужно знать - ваша терминология немного ушла. База данных «SQLdeveloper» отсутствует. SQLdeveloper - это просто пользовательский интерфейс Oracle для управления базами данных Oracle. Как вы видите сейчас, существует множество способов управления базами данных Oracle. Кроме того, я не уверен, что вы подразумеваете под «Он также вносит изменения в SQLdeveloper». – SteveDonie

+0

Да, вы правы, я имею в виду, что он вносит изменения в базу данных –

ответ

2

Есть два возможных проблем, вы работаете в:

  1. Вы используете <sqlFile>, но не уточняя splitStatements="false". По умолчанию Liquibase будет разделять SQL на точки с запятой, потому что это то, что требуется драйверу JDBC, но в сценарии PL/SQL у вас может быть одна CREATE PROCEDURE или что-то подобное, содержащее точки с запятой, но все еще одно утверждение. Вы также можете использовать <createProcedure> вместо sqlFile, который не разбивает операторы.

  2. В вашем скрипте есть специфические функции sqlplus. SQLPlus и SQLDeveloper не просто передают строки SQL прямо в базу данных, они имеют свои собственные функции, чтобы иногда изменять то, что фактически выполняется. JDBC, и поэтому Liquibase не имеет одинаковой функциональности, поэтому, если вы используете его в своих сценариях, они не будут работать. Если это так, наилучшим подходом является использование changeSet с <executeCommand>, чтобы позвонить в sqldeveloper или sqlplus.

+0

Спасибо за азерсера! Я работаю над этим сейчас, надеюсь, что это поможет –

+0

Я действительно использую . Я изменил splitStatements на «false», как вы сказали, но я все еще получаю ORA-00922. в нашем скрипте plsql (я не могу вставить его здесь) мы используем «if» и «elseif», поэтому в скрипте есть несколько точек с запятой. По-прежнему возможно запустить этот скрипт без использования ? –

+0

ORA-00922 - довольно общий ответ сам по себе. Дает ли он какие-либо подробности, чтобы помочь указать на часть сценария, которая является проблемой. Вы должны иметь возможность использовать sqlFile до тех пор, пока вы не используете специфические функции sqlplus, но помимо переменных привязки у меня нет большого списка тех, кто не работает. –

Смежные вопросы