Liquibase脚本不会保留数据

时间:2017-02-07 08:36:15

标签: plsql liquibase

我正在进行数据库迁移,我们将数据从1个表迁移到2个其他表。为此,我使用PL / SQL脚本。脚本的简化版本如下所示:

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>

1 个答案:

答案 0 :(得分:0)

我发现为什么它不起作用,这是我自己的一个非常愚蠢的错误。与liquibase无关。

我通过Intellij Oracle控制台插入测试数据。显然,此控制台默认运行事务中的所有内容,但不会自动提交。所以发生的事情是我通过Intellij插入测试数据,然后在liquibase中运行脚本(由于Intellij中的事务没有被提交,因此没有找到任何数据),然后尝试在Intellij中查看结果。在Intellij中手动编写测试数据事务后,一切正常。