Liquibase存储过程引发SQL语法错误

时间:2019-11-27 09:22:38

标签: stored-procedures syntax-error liquibase

我正在开发一个在Oracle数据库上运行存储过程的应用程序。它工作正常,但现在我正尝试使用Liquibase运行过程以具有独立的环境,而我无法使其正常工作。甚至最简单的“ Hello world”示例也给了我一个SQL语法错误。

我现在仅向您提供xml和错误,因为我不认为它来自Spring部分,因为它与数据库一起工作。如果我在SqlDeveloper上运行,则“ hello world”过程本身可以正常工作。

任何帮助将不胜感激,我真的不知道这是怎么回事。谢谢!

过程:

<databaseChangeLog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">

    <changeSet id="PROC_PKG_ACCEPTOR_P_ACCEPTORMISCINIT-create"
               author="sth" runOnChange="true">
        <createProcedure dbms="h2, oracle"
                         encoding="UTF-8"
                         procedureName="TESTHELLO"
                         relativeToChangelogFile="true">
            CREATE OR REPLACE PROCEDURE TESTHELLO
            IS
            BEGIN
            DBMS_OUTPUT.PUT_LINE('Hello World!');
            END;
        </createProcedure>
    </changeSet>
</databaseChangeLog>

错误:

Reason: liquibase.exception.DatabaseException: Erreur de syntaxe dans linstruction SQL {0}; attendu {1}
Syntax error in SQL statement {0}; expected {1}; SQL statement:
CREATE OR REPLACE PROCEDURE TESTHELLO
            IS
            BEGIN
            DBMS_OUTPUT.PUT_LINE('Hello World!');
            END [42001-197] [Failed SQL: CREATE OR REPLACE PROCEDURE TESTHELLO
            IS
            BEGIN
            DBMS_OUTPUT.PUT_LINE('Hello World!');
            END]

1 个答案:

答案 0 :(得分:0)

http://www.h2database.com/html/features.html#user_defined_functions

所以您无法使用H2完全完成我尝试做的事情,似乎解决方案是为Java函数创建别名。

谢谢你们