これまでLiquibaseを使用したことはなく、この問題の解決方法を理解することはできません。私が最近参加したプロジェクトは、古いプロジェクトのリメイクですので、ひどく設計されたスキーマを持つ古いデータベースを守らなければなりません。データベースは外部キー制約を使用しないため、もはや存在しないエントリを指すエントリが存在します。私の場合は、データベースに存在しない銀行口座を持つ医者です。私のチームがこれまでにこれらの問題を処理した方法は、NULLでIDを上書きしていました。だから私がやろうとしているのは、銀行が存在しないときにすべての銀行口座IDをNULLに設定することです。次のように私は、このタスクを達成するために作られたSQLコードは次のとおりです。複雑なWHEREステートメントでLiquibaseの行を更新する
UPDATE DOCTOR SET FK_BANKID = NULL WHERE FK_BANKID NOT IN (SELECT ID FROM BANK);
私は、私たちのLiquiBaseをチェンジにその修正を統合することを言われましたが、私はちょうどそれを行う方法を見つけ出すことはできません。
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd">
<changeSet id="remove_fk_bankid" author="v7">
<update tableName="DOCTOR">
<column name="FK_BANKID" value="NULL" />
<where>FK_BANKID NOT IN (SELECT ID FROM BANK)</where>
</update>
</changeSet>
</databaseChangeLog>
LiquiBaseを更新がエラーなしで実行されますが、私はその後データベースを見ると、何も変わっていない:これは私がこれまで行っているものです。誰も私のためにどのようにこの問題を解決するためのポインターを持っていますか?
ああ、それが助け場合によって、我々は、Oracle 10gデータベースを使用しています。 – David