You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何手动运行正常的存储过程在Docker初始化MariaDB时触发语法错误?

解决MariaDB Docker初始化存储过程的语法错误

问题核心在于SQL语句的分隔符冲突:Docker启动时,mysql客户端默认用分号(;)作为语句结束标记,但你的存储过程内部包含多个分号,客户端会把存储过程中间的分号当成整个语句的结尾,导致语法解析中断,触发ERROR 1064报错。而IntelliJ这类IDE会自动识别存储过程结构并处理分隔符,所以手动执行正常。

解决办法是临时修改SQL分隔符,避免和存储过程内部的分号冲突:

修改你的03_stored_procedure.sql文件,添加分隔符切换语句:

DELIMITER //
CREATE OR REPLACE PROCEDURE filterRentalStationByString (
    IN str VARCHAR(255),
    IN cnt INT
)
BEGIN

    SELECT
        r.id,
        r.rental_station_name,
        r.language_id,
        r.address,
        a.street,
        a.city,
        a.house_number,
        a.zip_code

    FROM
        rental_stations r
        INNER JOIN addresses a ON r.address = a.id

    WHERE
        MATCH( zip_code, city, street, house_number ) AGAINST ( str )
        OR
        LOWER( CONCAT( rental_station_name, street, city, house_number, zip_code ) ) LIKE LOWER( CONCAT( '%', str, '%' ) )

    LIMIT
        cnt;

END //
DELIMITER ;
  • DELIMITER //:告知mysql客户端,暂时将语句结束符改为//,不再使用分号
  • 存储过程定义完成后,用END //标记整个存储过程的结束
  • 最后用DELIMITER ;将结束符恢复为默认的分号

修改后重新启动docker-compose,初始化脚本即可正常执行该存储过程。

内容的提问来源于stack exchange,提问作者robertexplodes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:21:07