2016-05-19 3 views
0

При использовании функции LiquiBase, я расширенный класс liquibase.sqlgenerator.core.CreateIndexGenerator преобразовать эту командуДобавление/как конечный разделители на заявление LiquiBase Oracle SQL

create index indexI on tableT(columnC) 

во что-то вроде этого:

declare 
    index_already_exists exception; 
    pragma exception_init(index_already_exists, -955); 
    -- 
begin 
    execute immediate 'create index indexI on tableT(columnC)'; 
exception 
    when index_already_exists then 
    dbms_output.put_line('Warning: Index indexI already exists'); 
end; 

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

Он отлично работает при использовании mvn liquidibase: обновите. Но при генерации SQL с использованием mvn liquidibase: updateSQL отсутствует окончательная/(косая черта).

Глядя на LiquiBase исходный код я узнал, что класс LoggingExecutor используется, чтобы иметь то, что мне нужно по методу outputStatement

} else if (database instanceof OracleDatabase) { 
    output.write(StreamUtil.getLineSeparator()); 
    output.write("/"); 

Я пытался добавить последний/(слэш) после конца; если, но это становится так:

end; 
/; 

который недействителен код PLSQL

Есть ли другой способ, чтобы добавить заключительный/на SQL сгенерированный код, или установить в/в качестве конечного разделителя?

ответ

0

Вместо расширения CreateIndexGenerator вы можете вместо этого переопределить CreateIndexChange.generateStatements(), чтобы вернуть RawSqlStatement с вашим SQL. Это позволяет лучше настроить конечный разделитель и может работать лучше с LoggingExecutor.

0

Я использую Liquibase 3.4.2 и конечный разделитель/распознается автоматически. Когда я имею в виду автоматически, вам не нужно использовать свойство endDelimiter в объявлении набора изменений. Оказывается, что в некоторых более старых версиях Liquibase во время разбора была введена ошибка. Пожалуйста, проверьте http://www.liquibase.org/2015/06/liquibase-3-4-0-released.html , и вы увидите, что они исправить проблему https://liquibase.jira.com/browse/CORE-2227. Эта проблема повлияла на версию 3.3.2. Поэтому я предлагаю вам использовать более новую версию или правильно указать свойство endDelimiter в объявлении набора изменений.

http://www.liquibase.org/documentation/changes/sql.html

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

  • Нет связанных вопросов^_^