grails changelog前提条件不做任何事情
我正在尝试使用changelog对数据库进行更改。因为我不能保证特定代码的值当前存在,但可能存在,所以我需要能够检查它们,以便执行插入或更新 这是我一直在测试的东西,它似乎没有任何作用。欢迎提出任何建议grails changelog前提条件不做任何事情,grails,changelog,preconditions,Grails,Changelog,Preconditions,我正在尝试使用changelog对数据库进行更改。因为我不能保证特定代码的值当前存在,但可能存在,所以我需要能够检查它们,以便执行插入或更新 这是我一直在测试的东西,它似乎没有任何作用。欢迎提出任何建议 databaseChangeLog = { changeSet(author:'kmert', id:'tubecap-insert-update-1') { preConditions(onFail="WARN",onFailMessage:"Tube cap does
databaseChangeLog = {
changeSet(author:'kmert', id:'tubecap-insert-update-1') {
preConditions(onFail="WARN",onFailMessage:"Tube cap does not exist,skipping because it cannot be updated."){
sqlCheck(expectedResult='1', 'SELECT * FROM [ltc2_tube_cap] WHERE code=11')
}
grailsChange {
change {
sql.execute("""
UPDATE [ltc2_tube_cap]
SET [name] = 'White'
WHERE [code] = 11;
""")
}
rollback {
}
}
}
}
更新:我运行了changelog脚本,但是我现在遇到了这个错误。我从网上找到了代码。我找不到很多关于先决条件的文档
|正在为数据库hapi_app_user@jdbc:jtds启动dbm更新:sqlserver://localhost;databaseName=LabTraffic;MVCC=真;锁定超时=10000
解析TubeCapUpdate.groovy时出现问题:没有方法的签名:grails.plugin.databasemigration.DslBuilder.sqlCheck()适用于参数类型:(java.lang.String,java.lang.String)值:[1,从ltc2_tube_cap中选择*code=11](使用--verbose重新运行以查看堆栈跟踪)
解析changelog.groovy时出现问题:没有方法的签名:grails.plugin.databasemigration.DslBuilder.sqlCheck()适用于参数类型:(java.lang.String,java.lang.String)值:[1,从ltc2_tube_cap中选择*,其中代码=11](使用--verbose重新运行以查看堆栈跟踪)
groovy.lang.MissingMethodException:没有方法签名:grails.plugin.databasemigration.DslBuilder.sqlCheck()适用于参数类型:(java.lang.String,java.lang.String)值:[1,从ltc2_tube_cap中选择*代码=11]
位于grails.plugin.databasemigration.DslBuilder.invokeMethod(DslBuilder.groovy:117)
在Script1$\u运行\u closure1\u closure2\u closure3.doCall时(Script1.groovy:13)
位于grails.plugin.databasemigration.DslBuilder.invokeMethod(DslBuilder.groovy:117)
在Script1$\u运行\u closure1\u closure2.doCall(Script1.groovy:12)
位于grails.plugin.databasemigration.DslBuilder.invokeMethod(DslBuilder.groovy:117)
在Script1$\u run\u closure1.doCall(Script1.groovy:11)
位于grails.plugin.databasemigration.GrailsChangeLogParser.parse(GrailsChangeLogParser.groovy:84)
位于grails.plugin.databasemigration.DslBuilder.handleIncludedChangeLog(DslBuilder.groovy:747)
位于grails.plugin.databasemigration.DslBuilder.createNode(DslBuilder.groovy:139)
位于grails.plugin.databasemigration.DslBuilder.createNode(DslBuilder.groovy:590)
位于grails.plugin.databasemigration.DslBuilder.invokeMethod(DslBuilder.groovy:117)
在Script1$\u run\u closure1.doCall(Script1.groovy:6)
位于grails.plugin.databasemigration.GrailsChangeLogParser.parse(GrailsChangeLogParser.groovy:84)
更新(liquibase.java:107)
在DbmUpdate$\u run\u closure1\u closure2.doCall处(DbmUpdate:26)
在"DatabaseMigrationCommon"groovy$"运行"closure2"closure11.doCall("DatabaseMigrationCommon"groovy:59)
位于grails.plugin.databasemigration.MigrationUtils.executeInSession(MigrationUtils.groovy:133)
在"DatabaseMigrationCommon"groovy$"运行"closure2.doCall("DatabaseMigrationCommon"groovy:51)
在DbmUpdate$\u run\u closure1.doCall(DbmUpdate:25)中,确保以下内容
grails dbm-gorm-diff add-your-file-forupdate.groovy -add
然后在您的-file-forupdate.groovy中,您将看到
databaseChangeLog = {
changeSet(author:'kmert', id:'tubecap-insert-update-1') {
.
.
.
}
}
然后,重要的是,您要么将此作为迁移脚本文件包含,然后按如下方式执行:
只需手动在grails的末尾添加一行如下内容-app/migrations/changelog.groovy:
包括文件:“您的文件forupdate.groovy”
changelog.groovy始终自始至终运行,因此请确保始终在末尾添加新创建的迁移
干杯!有关更多信息,请参见sqlCheck前提条件的语法不正确
sqlCheck(expectedResult:'1', 'SELECT * FROM [ltc2_tube_cap] WHERE code=11')
请注意,在代码中,第一个参数是赋值语句expectedResult=1
,它应该是映射项expectedResult:1
我在这一页找到了答案。具有讽刺意味的是,在文档中添加了大量的DB迁移DSL示例。该文件已经添加到my changelog.groovy中。我最终发现它根本没有运行的原因显然是另一个迁移脚本正在消亡。现在,它正在运行,我的困境已经改变。