Я работаю над миграцией базы данных, в которой мы переносим данные из 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 вручную, он работает так, как ожидалось, поэтому кажется, что проблема связана с ликбазой.
Любая подсказка о том, почему это происходит/как это решить?
Edit:
изменений, который используется:
<changeSet id="2.4.0-03" author="bvandenberge">
<sqlFile path="03-pie-conversion.sql"
relativeToChangelogFile="true"
plitStatements="false" />
<rollback />
</changeSet>
Вы сделали «commit» в какой-то момент? Это необходимо для базы данных, основанной на транзакциях. –
@ J.Chomel Я попробовал добавить COMMIT; непосредственно перед КОНЕЦ; но это не изменило поведения. Кроме того, в Liquibase все ревизии запускаются в транзакции, поэтому в этом случае необходимо обрабатывать транзакции. – Bob
Что это за ' ' используется? –