mysql - 无数据库规范的 Liquibase 调用过程

标签 mysql sql oracle postgresql liquibase

调用存储过程的方式是没有数据库规范的吗?例如:

  1. <changeSet author="name" id="id1" dbms="mysql"> <sql> EXEC procedure_name('some_string_value') </sql> </changeSet>
  2. <changeSet author="name" id="id2" dbms="oracle"> <sql> EXECUTE procedure_name('some_string_value') </sql> </changeSet>
  3. <changeSet author="name" id="id3" dbms="postgresql"> <sql> SELECT fun_name('some_string_value') </sql> </changeSet>

我需要避免数据库条件,因为我在不同的地方调用此过程。有没有办法通过在一个地方实现数据库条件来实现这一目标?

最佳答案

我找到解决方案:

<property name="call.procedure" value="EXEC" dbms="oracle" />
<property name="call.procedure" value="SELECT" dbms="postgresql" />
<property name="call.procedure" value="EXEC" dbms="mssql" />
<property name="before.param" value="(" dbms="oracle" />
<property name="before.param" value="(" dbms="postgresql" />
<property name="before.param" value=" @Name=" dbms="mssql" />
<property name="after.param" value=")" dbms="oracle" />
<property name="after.param" value=")" dbms="postgresql" />
<property name="after.param" value="" dbms="mssql" />

现在我可以避免在变更集中指定数据库名称,并在一行中为不同的数据库调用过程。

<changeSet author="andrew" id="id">
  <sql>
    ${call.procedure} cd_test ${before.param}'some_string'${after.param}   
  </sql>
</changeSet>

关于mysql - 无数据库规范的 Liquibase 调用过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35913633/

相关文章:

java - 在 JDBC 或 Spring JDBC 中使用 REF CURSOR 的替代方案?

c# - 与 CustomObject 级联

PHP - SQL 语句中的多个变量用法

java - 锁定等待超时超过 JPA 插入

sql - sql 中的求和和连接

java - BigDecimal请求获取参数(String不能转换为BigDecimal)

javascript - 单击函数调用 javascript 然后重定向到 php 页面

sql - 中止 MySQL 脚本执行的方法(可能引发错误)?

mysql - 如何在嵌套子查询中引用主查询的表?

java - Glassfish 节点的最大数量?