我尝试从变更集中设置 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;
我收到:如果存在 aaa,则执行 sql drop 过程时出错;
我的问题是我需要先“删除过程(如果存在)”,然后再创建它,我不得不在脚本中使用“定界符”。
不知道是mysql解析器的问题,liquibase错误还是我的脚本有误
最佳答案
我在(Oracle 上的)程序上苦苦挣扎了一段时间,我开始相信 Liquibase 并不是在考虑程序的情况下创建的;)
无论如何-也许dropProcedure和 createProcedure改变对你来说就足够了吗?
我找到了 executeCommand使用 sqlplus 进行更改,使其成为在 Oracle 上运行脚本的最佳解决方案...
关于java - Liquibase 运行存储过程返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29060417/