2012-03-28 2 views
2

При использовании Liquibase существует ли способ использовать существующие данные для генерации некоторых данных, которые необходимо вставить?Использование существующих данных с Liquibase?

Например, я хочу обновить строку с идентификатором 5, но я не знаю, что идентификатор будет равен 5, поскольку это связано с другой таблицей, где я действительно получаю идентификатор из. Есть ли способ сообщить Liquibase, что бы получить идентификатор из запроса SELECT?

Я предполагаю, что это действительно не возможно, поскольку я чувствую, что Liquibase действительно разработана для очень структурированного нединамического подхода, но это не больно спрашивать.

Спасибо.

ответ

2

Возможно создание собственного custom refactoring class для генерации SQL. Функциональность предназначена для поддержки создания статического SQL на основе параметров набора изменений.

Таким образом, возможно получить соединение с базой данных, но предупреждение о работоспособности, связанное с этим подходом, заключается в том, что сгенерированный SQL является динамическим (ваши данные могут меняться) и тесно привязан к экземпляру базы данных.

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

Я думал об этом прецеденте в течение некоторого времени. Я до сих пор не знаю, является ли Liquibase лучшим решением для этой проблемы управления данными или же ее необходимо объединить с дополнительным инструментом, например, dbunit.

4

Вы не можете использовать встроенные изменения для вставки данных на основе существующих данных, но вы можете использовать тег с инструкциями insert с вложенными выделениями.

Например:

<changeSet> 
    <sql>insert into person (name, manager_id) values ('Fred', (select id from person where name='Ted'))</sql> 
</changeSet> 

Примечание: SQL (и поддержка вставки + выбор) зависит от поставщика базы данных.

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