java - Liquibase 运行存储过程返回错误

标签 java mysql stored-procedures liquibase

我尝试从变更集中设置 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 并不是在考虑程序的情况下创建的;)

无论如何-也许dropProcedurecreateProcedure改变对你来说就足够了吗?

我找到了 executeCommand使用 sqlplus 进行更改,使其成为在 Oracle 上运行脚本的最佳解决方案...

关于java - Liquibase 运行存储过程返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29060417/

相关文章:

java - 使用Java的正则表达式来识别括号字符串中树节点的子节点。

java - 将 mouseListener 添加到数组循环中的标签

mysql - 在mysql子查询中按日期获取第一条记录和最后一条记录的值

mysql - 需要使用带有 Group By 的 Mysql 查询显示所有行

sql - 存储过程计算和性能改进

sql-server - 以较低的优先级运行 SQL Server 2008 存储过程

java - 更新组件的高度也会改变它的宽度

java - 如何使用线程实现缓动功能

mysql - 如何在opencart的mysql中插入最大值加一

sql-server - 损坏的 Azure SQL 存储过程只能通过删除重新创建来修复