sql - Liquibase YAML - 前提条件
问题描述
我正在尝试检查表是否存在,然后执行变更集。但似乎前提条件没有正确执行。关于如何检查表是否存在并执行语句的任何建议?
Liquibase 脚本:
databaseChangeLog:
- preConditions:
- onFail: MARK_RAN
- sqlCheck:
expectedResult: 1
sql: SELECT count(*) FROM information_schema.TABLES WHERE TABLE_NAME = TABLE_MAY_NOT_EXIST
- changeSet:
id: 1001001
author: upgrade_author
changes:
- sql:
sql: UPDATE MY_TABLE SET COL_A = (SELECT TOP 1 COL_A FROM TABLE_MAY_NOT_EXIST ORDER BY COL_A DESC)
stripComments: true
错误日志:
Caused by: liquibase.exception.DatabaseException: Table "TABLE_MAY_NOT_EXIST" not found; SQL statement:
UPDATE MY_TABLE SET COL_A = (SELECT TOP 1 COL_A FROM TABLE_MAY_NOT_EXIST ORDER BY COL_A DESC) [42102-197] [Failed SQL: UPDATE MY_TABLE SET COL_A = (SELECT TOP 1 COL_A FROM TABLE_MAY_NOT_EXIST ORDER BY COL_A DESC)]
at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:356) ~[liquibase-core-3.6.3.jar:na]
at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:57) ~[liquibase-core-3.6.3.jar:na]
at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:125) ~[liquibase-core-3.6.3.jar:na]
at liquibase.database.AbstractJdbcDatabase.execute(AbstractJdbcDatabase.java:1229) ~[liquibase-core-3.6.3.jar:na]
at liquibase.database.AbstractJdbcDatabase.executeStatements(AbstractJdbcDatabase.java:1211) ~[liquibase-core-3.6.3.jar:na]
at liquibase.changelog.ChangeSet.execute(ChangeSet.java:600) ~[liquibase-core-3.6.3.jar:na]
解决方案
我看到你错过了 liquibase 的属性文件,你可以在这里找到编写 liquibase 属性文件的方法
此外,可以按照此处的说明创建更改日志文件
推荐阅读
- visual-studio-code - vscode如何让“打字屏”变大
- amazon-web-services - FFMpeg WebVTT hls 播放列表不同步
- python - Traceback(最近一次调用最后一次):文件“/var/www/html/tki.py”,_tkinter.TclError:没有显示名称
- r - 为什么 R 中的 HTML 函数实际上不会编写 HTML?
- json - 我如何将字段 1 值作为 gson 的整数变量?
- reactjs - 无法访问“此”
- c - 如何在 C 中处理不同的验证问题集?
- python - pip install scipy 的问题 - RuntimeError: Broken toolchain: cannot link a simple C program
- c++ - 为什么我会收到类函数参数的错误?“没有匹配的调用函数”C++
- c# - 基于Canvas的WPF自定义控件,在哪里可以放置启动代码?