首页 > 解决方案 > 在 liquibase 上为 H2 数据库创建 SQL 函数

问题描述

由于我需要在 liquibase 中使用 2 个数据库(psql 和 h2),因此我尝试以不同的方式创建 SQL 函数:

<changeSet author="zina" id="calculate_test">
        <sqlFile            dbms="h2, psql"
                            encoding="UTF-8"
                            endDelimiter="/nGO"
                            path="calculate_test.sql"
                            relativeToChangelogFile="true"
                            splitStatements="false"
                            stripComments="false"/>
    </changeSet>

calculate_test.sql的样子

CREATE OR REPLACE FUNCTION calculate()
RETURNS int
BEGIN
RETURN 5;
END;

GO

或者直接使用sql代码

<changeSet author="xxx" id="sql-example">
    <sql dbms="h2"
            endDelimiter="\nGO"
            splitStatements="true"
            stripComments="true">xxx</sql>
</changeSet>

并得到同样的错误。

liquibase.exception.MigrationFailedException: Migration failed for change set migrations.xml::calculate_test::zkensche:
 Reason: liquibase.exception.DatabaseException: Syntax error in SQL statement "CREATE OR 

REPLACE FUNCTION[*] CALCULATE()
RETURNS INT
BEGIN
RETURN 5;
END;

GO"; expected "FORCE, VIEW, ALIAS, SEQUENCE, USER, TRIGGER, ROLE, SCHEMA, CONSTANT, DOMAIN, TYPE, DATATYPE, AGGREGATE, LINKED, MEMORY, CACHED, LOCAL, GLOBAL, TEMP, TEMPORARY, TABLE, SYNONYM, PRIMARY, UNIQUE, HASH, SPATIAL, INDEX"; SQL statement: ...

有没有人设法在 H2 上创建 SQL 函数,或者它是在 Java 上编写它的唯一方法?

根据文档,没有创建CREAT FUNCTION SQL 命令。

我会感谢评论、变通方法和 Java 代码片段。

最好的,吉娜

标签: sqlh2liquibasesql-function

解决方案


推荐阅读