2017-02-07 80 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時,它按預期工作,所以看起來問題與liquibase有關。

任何線索爲什麼發生這種情況/如何解決這個問題?

編輯:用於

變更集:

<changeSet id="2.4.0-03" author="bvandenberge"> 
    <sqlFile path="03-pie-conversion.sql" 
      relativeToChangelogFile="true" 
      plitStatements="false" /> 
    <rollback /> 
</changeSet> 
+1

你有沒有做過'提交;'在某個時候?這對於基於事務的數據庫是必需的。 –

+0

@ J.Chomel我試着添加一個COMMIT;就在END之前;但這並沒有改變行爲。接下來,在liquibase中,所有變更集都在事務中運行,因此在這種情況下應該處理提交。 – Bob

+0

這是什麼''用於? –

回答

0

我發現爲什麼它不工作,這是我自己的一個非常愚蠢的錯誤。與liquibase無關。

我通過Intellij Oracle控制檯插入測試數據。顯然,這個控制檯默認運行事務中的所有內容,但不會自動提交。所以發生的事情是我通過Intellij插入了測試數據,然後在liquibase中運行腳本(因爲Intellij中的事務未提交,因此未找到任何數據),然後嘗試在Intellij中查看結果。在Intellij中手動編寫測試數據事務後,一切正常。