Liquibase使用序列nextval作为插入ID的正确语法咨询
解决方案
你的报错是因为valueSequenceNext并不是<loadData>元素下<column>标签的合法属性,该属性仅适用于<addColumn>等其他类型的变更集元素。要在loadData中用Oracle序列生成主键ID,应该使用defaultValueComputed属性,它支持传入SQL表达式来计算列值。
修改后的XML配置
<changeSet> <loadData file="foo.csv" separator="," tableName="BAR" relativeToChangeLogFile="true"> <column name="id" type="numeric" defaultValueComputed="BAR_SEQ.NEXTVAL"/> <column name="ukk" type="string"/> <column name="mukk" type="string"/> <column name="fukk" type="string"/> </loadData> </changeSet>
说明
defaultValueComputed会让Liquibase在插入每条CSV数据时,执行指定的SQL表达式(这里是BAR_SEQ.NEXTVAL)来生成id列的值。- 你的CSV文件无需修改,因为
id列不需要在CSV中提供,Liquibase会自动为每条记录填充序列的下一个值。
如果使用的是Liquibase 4.0+版本,也可以使用valueComputed属性,效果与defaultValueComputed一致,两种写法都能兼容Oracle数据库。
内容的提问来源于stack exchange,提问作者szelelaci
相关产品推荐
相关产品推荐

