Liquibase运行存储过程返回错误

时间:2015-03-15 12:08:53

标签: java mysql stored-procedures liquibase

我尝试从changeset设置sql文件以运行保存到我的项目中的存储过程,但它返回sql错误。 在这里我宣布了sqlfile:

<sqlFile path="/db/FindAllFriends.sql" endDelimiter="//" relativeToChangelogFile="true" splitStatements="true" stripComments="true" />

这是我的程序:

DELIMITER //

CREATE PROCEDURE aaa()
BEGIN

END //

DELIMITER ;

如果我在脚本中使用“分隔符”它将返回sql错误(您的sql语法中有错误;请查看手册....)。如果我删除它,它会没问题,但它只适用于“;”分隔符。

如果我尝试删除然后创建过程(或多个语句):

Drop procedure if exists aaa;

CREATE PROCEDURE aaa()

BEGIN

END;

我收到:Error executing sql drop procedure if exists aaa;

我的问题是我需要先“删除程序,如果存在”,然后创建它,我就不得不在脚本中使用“分隔符”。

我不知道mysql解析器是否存在问题,liquibase错误或我在我的脚本中犯了错误。

2 个答案:

答案 0 :(得分:1)

我现在已经在程序上(在Oracle上)挣扎了一段时间,我开始相信Liquibase并不是考虑到程序;)

无论如何 - 也许dropProcedurecreateProcedure更改对您来说已经足够了吗?

我发现使用sqlplus进行executeCommand更改是在Oracle上运行脚本的最佳解决方案......

答案 1 :(得分:1)

最后我能够运行所有脚本;我第一次尝试的时候,我不知道自己弄错了什么,但现在有效了。我必须在sqlFile中声明endDelimiter并将此分隔符用于脚本,同时我删除了&#34; Delimiter //&#34;来自剧本