我尝试从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错误或我在我的脚本中犯了错误。
答案 0 :(得分:1)
我现在已经在程序上(在Oracle上)挣扎了一段时间,我开始相信Liquibase并不是考虑到程序;)
无论如何 - 也许dropProcedure和createProcedure更改对您来说已经足够了吗?
我发现使用sqlplus进行executeCommand更改是在Oracle上运行脚本的最佳解决方案......
答案 1 :(得分:1)
最后我能够运行所有脚本;我第一次尝试的时候,我不知道自己弄错了什么,但现在有效了。我必须在sqlFile中声明endDelimiter并将此分隔符用于脚本,同时我删除了&#34; Delimiter //&#34;来自剧本