2015-09-25 75 views
2

我使用的是Liquibase插入到兩行添加到數據庫中,並通過外鍵將它們鏈接如下:插入通過Liquibase新紀錄外鍵

<changeSet id="1.0.1" author="x">  
    <insert tableName="TABLE1"> 
     <column name="NAME" value="a value"/> 
    </insert> 
</changeSet> 

<changeSet id="1.0.2" author="x">  
    <insert tableName="TABLE2"> 
     <column name="FK" valueComputed="(SELECT ID FROM TABLE1 WHERE NAME = 'a value')"/> 
    </insert> 
</changeSet> 

兩個記錄插入正確的,除了TABLE2中外鍵的值。該值保持爲空。所以看起來「computeValue」屬性沒有正確執行,但我不明白爲什麼。我想在Liquibase中有一個解決方案,而不是普通的SQL,因爲Liquibase爲我提供了可以輕鬆插入clob字段的可能性。

TABLE1: ID - 5522839049923041049862979858500642751, NAME - 一個值

TABLE2: ID - 4246034635279239656888789950125407204, FK - (空)

這是表結構:

<changeSet id="1.0.0" author="x">   
    <createTable tableName="TABLE1"> 
     <column name="ID" type="NUMBER (38)"> 
      <constraints primaryKey="true"/> 
     </column> 
     <column name="NAME" type="NUMBER (38)"> 
      <constraints nullable="false"/> 
     </column> 
    </createTable> 
    <addUniqueConstraint columnNames="NAME" 
     constraintName="TABLE1_UK1" 
     tableName="TABLE1"/> 

    <createTable tableName="TABLE2"> 
     <column name="ID" type="NUMBER (38)"> 
      <constraints primaryKey="true"/> 
     </column> 
     <column name="FK" type="NUMBER (38)"> 
      <constraints nullable="true"/> 
     </column> 
    </createTable> 
    <addForeignKeyConstraint baseColumnNames="FK" 
     baseTableName="TABLE2" 
     constraintName="TABLE2_TABLE1_FK1" 
     referencedColumnNames="ID" 
     referencedTableName="TABLE1"/> 
</changeSet> 

請注意,在插入新記錄時,使用觸發器爲名爲ID的字段生成標識符(主鍵)兩張桌子。

+0

這將是值得Liquibase顯示生成的SQL,'updateSql'參數。這可能會讓你知道它試圖做什麼。 –

回答

0

也許你可以使用主鍵和外鍵的預定義值?

+0

是的,這正是我現在正在使用的替代方案。但這不是首選解決方案。 – Christophe