Ich habe noch nie zuvor mit Liquibase gearbeitet und kann einfach nicht herausfinden, wie ich dieses Problem lösen kann. Das Projekt, dem ich kürzlich beigetreten bin, ist ein Remake eines alten Projekts, also müssen wir bei einer alten Datenbank bleiben, die ein entsetzlich gestaltetes Schema hat. Die Datenbank verwendet keine Fremdschlüsseleinschränkungen, daher gibt es noch Einträge, die auf einen Eintrag zeigen, der nicht mehr existiert. In meinem Fall ist es ein Arzt, der ein Bankkonto bei einer Bank hat, das nicht in der Datenbank existiert. Die Art und Weise, wie mein Team diese Probleme bisher behandelt hat, überschreibt die ID mit NULL. Also versuche ich im Grunde, alle Bankkonto-IDs auf NULL zu setzen, wenn die Bank nicht existiert. Der SQL-Code habe ich diese Aufgabe zu erreichen, ist wie folgt:Aktualisieren von Zeilen in Liquibase mit einer komplexen WHERE-Anweisung
UPDATE DOCTOR SET FK_BANKID = NULL WHERE FK_BANKID NOT IN (SELECT ID FROM BANK);
Mir wurde gesagt, zu, dass in unsere Liquibase Changesets beheben zu integrieren, aber ich kann einfach nicht herausfinden, wie es zu tun. Dies ist, was ich bisher getan haben:
<?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>
Das Update Liquibase ohne Fehler ausgeführt wird, aber wenn ich in der Datenbank suchen danach, hat sich nichts geändert. Hat jemand irgendwelche Hinweise für mich, wie man dieses Problem löst?
Oh, und übrigens, verwenden wir eine Oracle 10g Datenbank, ob das hilft. – David