2017-02-07 10 views
1

Я работаю над миграцией базы данных, в которой мы переносим данные из 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> 
+1

Вы сделали «commit» в какой-то момент? Это необходимо для базы данных, основанной на транзакциях. –

+0

@ J.Chomel Я попробовал добавить COMMIT; непосредственно перед КОНЕЦ; но это не изменило поведения. Кроме того, в Liquibase все ревизии запускаются в транзакции, поэтому в этом случае необходимо обрабатывать транзакции. – Bob

+0

Что это за '' используется? –

ответ

0

я узнал, почему это не работает, и это было действительно глупая ошибка себя. Ничего общего с липибазой.

Я вставляю тестовые данные через консоль Intellij Oracle. По-видимому, эта консоль по умолчанию запускает все в транзакции, но не фиксирует ее автоматически. Так что случилось, что я вставил тестовые данные через Intellij, затем запустил скрипт в Liquibase (который не нашел никаких данных, потому что транзакция в Intellij не была выполнена), а затем попыталась увидеть результат в Intellij. После ручного ввода транзакции тестовых данных в Intellij все работало нормально.