Java Liquibase运行存储过程返回错误
我试图从变更集中设置sql文件,以运行保存到项目中的存储过程,但它返回sql错误。 在这里,我声明了sqlfile:Java Liquibase运行存储过程返回错误,java,mysql,stored-procedures,liquibase,Java,Mysql,Stored Procedures,Liquibase,我试图从变更集中设置sql文件,以运行保存到项目中的存储过程,但它返回sql错误。 在这里,我声明了sqlfile: <sqlFile path="/db/FindAllFriends.sql" endDelimiter="//" relativeToChangelogFile="true" splitStatements="true" stripComments="true" /> 如果我让“分隔符”出现在脚本中,它将返回一个sql错误(您的sql语法中有一个错误;请查看手册……
<sqlFile path="/db/FindAllFriends.sql" endDelimiter="//" relativeToChangelogFile="true" splitStatements="true" stripComments="true" />
如果我让“分隔符”出现在脚本中,它将返回一个sql错误(您的sql语法中有一个错误;请查看手册……)。若我删除它,它将是确定的,但它只适用于“;”分隔符
如果我尝试删除然后创建过程(或多个语句):
我收到:执行sql删除过程时出错(如果存在)代码>
我的问题是,我需要先“删除过程(如果存在)”,然后再创建它,我被迫在脚本内部使用“分隔符”
我不知道这是mysql解析器的问题、liquibase错误还是我在脚本中犯了错误。我(在Oracle上)与过程斗争了一段时间,我开始相信liquibase并不是在考虑过程的情况下制作的;)
不管怎么说,也许这些改变对你来说就足够了
我发现使用sqlplus进行更改是在Oracle上运行脚本的最佳解决方案…最终我能够运行所有脚本;我不知道我第一次尝试时犯了什么错误,但现在起作用了。我必须在sqlFile中声明endDelimiter,并在脚本中使用此分隔符,我还从脚本中删除了“delimiter//”的声明我已将所有脚本保存到java项目中,但当我删除数据库时,只会重新生成表,因此我需要在mysql中手动运行所有脚本。我可以为每个脚本在changeset中放置一个dropProcedure和一个createProcedure,但我喜欢简单地运行每个脚本中的任何内容。
DELIMITER //
CREATE PROCEDURE aaa()
BEGIN
END //
DELIMITER ;
Drop procedure if exists aaa;
CREATE PROCEDURE aaa()
BEGIN
END;