oracle 无数据库规范的Liquibase调用程序

zbwhf8kr  于 2023-03-01  发布在  Oracle
关注(0)|答案(2)|浏览(117)

调用存储过程的方式是否不需要数据库规范?例如:

  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>
    我需要避免数据库条件,因为我在不同的地方调用这个过程。有没有办法在一个地方实现数据库条件来实现这一点?
mspsb9vt

mspsb9vt1#

我找到了解决办法:

<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>
pdtvr36n

pdtvr36n2#

用途

<sqlFile
  path=“xxx.sql”
  relativeToChangelogFile=“true”
  stripComments=“true”
  splitStatements=“false”
  endDelimiter=“/”
  dbms=“oracle”
/>

和.sql文件应具有

BEGIN
    package.function();
END;
/

相关问题