Non ho mai usato Liquibase in precedenza e non riesco a capire come risolvere questo problema. Il progetto a cui ho aderito di recente è un remake di un vecchio progetto, quindi dobbiamo attenerci a un vecchio database, che ha uno schema orribilmente progettato. Il database non usa vincoli di chiave esterna, quindi ci sono ancora voci che puntano a una voce che non esiste più. Nel mio caso si tratta di un medico con un conto bancario presso una banca che non esiste nel database. Il modo in cui il mio team ha gestito questi problemi finora è stato annullando l'ID con NULL. Quindi in pratica quello che sto cercando di fare è impostare tutti gli ID dei conti bancari su NULL, quando la banca è inesistente. Il codice SQL ho fatto per eseguire questa operazione è la seguente:Aggiornamento delle righe in Liquibase con una dichiarazione WHERE complessa
UPDATE DOCTOR SET FK_BANKID = NULL WHERE FK_BANKID NOT IN (SELECT ID FROM BANK);
mi è stato detto da integrare che fissano nei nostri gruppi di modifiche Liquibase, ma io proprio non riesco a capire come farlo. Questo è quello che ho fatto finora:
<?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>
L'aggiornamento Liquibase eseguito senza errori, ma quando guardo il database dopo, nulla è cambiato. Qualcuno ha qualche indicazione su come risolvere questo problema?
Oh, e dal modo in cui si utilizza un database Oracle 10g se questo aiuta. – David