2

Liquibase を使用する場合、挿入するデータの一部を生成するために既存のデータを使用する方法はありますか?

たとえば、ID 5 の行を更新したいとしますが、実際に ID を取得する別のテーブルにリンクされているため、ID が 5 になることを前もって知りません。Liquibase に SELECT クエリから ID を取得するように指示する方法はありますか?

Liquibase は非常に構造化された非動的なアプローチ向けに設計されていると感じているので、これは実際には不可能だと思いますが、質問しても問題ありません。

ありがとう。

4

2 に答える 2

5

組み込みの変更を使用して、既存のデータに基づいてデータを挿入することはできませんが、入れ子になった選択を含む挿入ステートメントでタグを使用することはできます。

例えば:

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

注: SQL (および挿入と選択のサポート) は、データベースのベンダーによって異なります。

于 2012-04-04T05:39:58.890 に答える
2

独自のカスタム リファクタリング クラスを作成して SQL を生成することができます。この機能は、変更セットのパラメーターに基づいて静的 SQL の生成をサポートするように設計されています。

したがって、データベースへの接続を取得することは可能ですが、このアプローチに付随する健康上の警告は、生成された SQL が動的 (データが変更される可能性がある) であり、データベース インスタンスに密接に結び付けられていることです。

これにより発生する問題の例として、DBA が本番データベースに対して実行する SQL アップグレード スクリプトを生成できないことがあります。

私はしばらくの間、このユースケースについて考えてきました。liquibase がこのデータ管理の問題に対する最適な解決策なのか、それともdbunitのような追加のツールと組み合わせる必要があるのか​​はまだわかりません。

于 2012-03-28T21:11:53.447 に答える