데이터를 1 개의 테이블에서 2 개의 다른 테이블로 마이그레이션하는 데이터베이스 마이그레이션 작업을하고 있습니다. 이를 위해 PL/SQL 스크립트를 사용합니다.Liquibase 스크립트가 데이터를 유지하지 않습니다.
BEGIN
FOR foo IN (SELECT * FROM FOO) LOOP
INSERT INTO BAR (ID, STATUS)
VALUES (foo.ID, foo.STATUS);
FOR foolog IN (SELECT * FROM FOO_LOG where ID = foo.ID) LOOP
INSERT INTO BAR_LOG (ID, REV);
VALUES (FOO_SEQ.CURRVAL, foolog.REV);
END LOOP;
END LOOP;
END;
문제는 다음과 같습니다 : liquibase는 스크립트를 실행하지만,이 스크립트가 실행되지 않는 것처럼 보이는 데이터가 데이터베이스에 지속되지 않는 스크립트의 매우 단순화 된 버전은 아래에서 볼 수 있습니다. 오타를 의도적으로 도입하면 (예 : 테이블 이름 변경) 스크립트가 실행되지 않으므로 실제로 스크립트가 실행됩니다. 또한 SQL을 수동으로 실행하면 예상대로 작동하므로 문제가 liquibase와 관련이있는 것으로 보입니다.
왜 이런 일이 발생했는지/어떻게 해결할 수 있는지 실마리가 있습니까?
편집 : 사용
변경 집합 : 그것은 작동하지 않는 그것은 자신의 정말 바보 같은 실수 왜 발견
<changeSet id="2.4.0-03" author="bvandenberge">
<sqlFile path="03-pie-conversion.sql"
relativeToChangelogFile="true"
plitStatements="false" />
<rollback />
</changeSet>
어떤 시점에서'commit;을 한 적이 있습니까? 이것은 트랜잭션 기반 데이터베이스에 필요할 것입니다. –
@ J.Chomel COMMIT를 추가하려고했습니다. END 직전. 그러나 이것은 행동을 변화시키지 않았다. 그 다음으로, liquibase에서 모든 변경 집합은 트랜잭션에서 실행되므로이 경우 커밋을 처리해야합니다. – Bob
이 ' '은 무엇입니까? –