gpt4 book ai didi

mysql - Liquibase:MySQL 存储过程中的 SQL 语法错误

转载 作者:行者123 更新时间:2023-11-29 03:20:27 24 4
gpt4 key购买 nike

我尝试通过 Liquibase 运行 MySQL 存储过程 SQL 脚本,但没有成功。

db.storedprocedure.xml 的内容:

<changeSet author="zzz" id="1" runOnChange="true" runInTransaction="true">
<sqlFile path="changelogs/change_03.sql"
relativeToChangelogFile="true"
endDelimiter="$$"
stripComments="false"
splitStatements="false"/>
</changeSet>

我的 SQL 文件 change_03.sql 的内容:

$$

CREATE PROCEDURE `liqui01`.`User_Search`(
INOUT id INT,
OUT name VARCHAR(50)
)
BEGIN

SET @sql = CONCAT("SELECT id, name FROM user WHERE da.MarketId = ", id );

PREPARE stmt from @sql;
EXECUTE stmt;

END$$

它显示如下错误:

Unexpected error running Liquibase: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$$ ...

我尝试将“$$”更改为其他分隔符,或者将 SQL 放在 <sql> 中XML 文件的标签,都不起作用。

如有任何建议,我们将不胜感激!

更新 1

@Shadow 给出了正确的答案(不幸的是我不能将其标记为答案,因为它在评论中),从 sql 脚本中删除定界符行将使其工作,感谢他!

现在的问题是:如何使用“endDelimiter”参数?

最佳答案

liquibase 内部将 delimiter 命令添加到命令的开头,您必须删除或注释带有 $$ 的第一行:

-- $$

CREATE PROCEDURE `liqui01`.`User_Search`(

...

END$$

关于mysql - Liquibase:MySQL 存储过程中的 SQL 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46100579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com