【发布时间】:2019-11-27 09:22:38
【问题描述】:
我正在开发一个在 Oracle 数据库上运行存储过程的应用程序。它工作正常,但现在我正在尝试使用 Liquibase 运行程序以拥有一个独立的环境,但我无法让它工作。即使是最简单的“Hello world”示例也会给我一个 SQL 语法错误。
我现在只是给你 xml 和错误,因为我不认为它来自 Spring 部分,因为它与 DB 一起工作。如果我在 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]
【问题讨论】:
-
为什么要删除我打招呼的部分。你好!
-
create procedure不适用于 H2,所以很可能这就是错误的来源。 -
好的,谢谢,您知道正确的语法吗?我对 SQL 不是很熟悉...
-
请注意,存储过程的正确语法是
CREATE OR ALTER,而不是用于表的CREATE OR REPLACE
标签: stored-procedures syntax-error liquibase