Nigdy wcześniej nie stosowałem Liquibase i po prostu nie mogę wymyślić, jak rozwiązać ten problem. Projekt, do którego ostatnio dołączyłem, to remake starego projektu, więc musimy trzymać się starej bazy danych, która ma okropnie zaprojektowany schemat. Baza danych nie używa żadnych ograniczeń klucza obcego, więc nadal istnieją wpisy wskazujące pozycję, która już nie istnieje. W moim przypadku jest to lekarz posiadający rachunek bankowy w banku, który nie istnieje w bazie danych. Sposób, w jaki mój zespół radził sobie z tymi problemami do tej pory, przesłaniał identyfikator NULL. Więc zasadniczo próbuję ustawić wszystkie identyfikatory konta bankowego na NULL, kiedy bank nie istnieje. Kod SQL zrobiłem do wykonania tego zadania jest następująca:Aktualizowanie wierszy w Liquibase ze złożonym poleceniem WHERE
UPDATE DOCTOR SET FK_BANKID = NULL WHERE FK_BANKID NOT IN (SELECT ID FROM BANK);
powiedziano mi, że integracja naprawić w naszych Zestawienia zmian Liquibase, ale po prostu nie może dowiedzieć się, jak to zrobić. To, co zrobiłem do tej pory:
<?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>
Aktualizacja Liquibase przebiega bez błędów, ale kiedy patrzę na bazie potem nic się nie zmieniło. Czy ktoś ma jakieś wskazówki dla mnie, jak rozwiązać ten problem?
No i przy okazji, jesteśmy z wykorzystaniem bazy danych Oracle 10g, czy to pomaga. – David