Tôi chưa bao giờ sử dụng Liquibase trước đây và không thể tìm ra cách giải quyết vấn đề này. Dự án tôi vừa mới tham gia là một bản làm lại của một dự án cũ, vì vậy chúng tôi phải gắn bó với một cơ sở dữ liệu cũ, có lược đồ được thiết kế khủng khiếp. Cơ sở dữ liệu không sử dụng các ràng buộc khóa ngoài, vì vậy vẫn còn các mục trỏ đến một mục không tồn tại nữa. Trong trường hợp của tôi, đó là một bác sĩ có một tài khoản ngân hàng tại một ngân hàng không tồn tại trong cơ sở dữ liệu. Cách nhóm của tôi xử lý các vấn đề này cho đến nay đã ghi đè ID với NULL. Vì vậy, về cơ bản những gì tôi đang cố gắng làm là đặt tất cả các ID tài khoản ngân hàng thành NULL, khi ngân hàng không tồn tại. Mã SQL mà tôi đã thực hiện để thực hiện tác vụ này như sau:Cập nhật các hàng trong Liquibase với câu lệnh WHERE
UPDATE DOCTOR SET FK_BANKID = NULL WHERE FK_BANKID NOT IN (SELECT ID FROM BANK);
Tôi đã được thông báo rằng tích hợp vào bộ thay đổi Liquibase của chúng tôi, nhưng tôi không thể tìm ra cách thực hiện. Đây là những gì tôi đã thực hiện cho đến thời điểm này:
<?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>
Bản cập nhật Liquibase chạy không có lỗi, nhưng khi tôi nhìn vào cơ sở dữ liệu sau đó, không có gì thay đổi. Có ai có bất kỳ con trỏ cho tôi làm thế nào để giải quyết vấn đề này?
Oh và bằng cách này, chúng tôi đang sử dụng một cơ sở dữ liệu Oracle 10g nếu giúp. – David