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

Grafana查询中创建调用MySQL存储过程报1064错误如何解决

问题根因
  • 分隔符冲突:MySQL默认语句分隔符为;,存储过程内部使用的;会被提前识别为语句结束符,导致CREATE PROCEDURE语句被截断解析,后续的CALL语句被判定为非法语法。
  • Grafana MySQL数据源默认禁用多语句执行:同一段查询中同时包含存储过程创建、调用两条独立SQL,默认配置下数据源一次仅支持执行单条SQL,第二条及以后的语句都会触发语法报错。
  • 隐藏的重名冲突问题:若每次查询都创建同名存储过程,第一次执行成功后,后续执行会报存储过程已存在的错误,当前报错只是因为语法校验在更早阶段触发。
解决方案

方法1:调整配置+修复SQL语法适配存储过程写法

  1. 开启多语句执行权限:打开Grafana对应MySQL数据源的配置页,勾选Allow multiple statements选项,保存后刷新数据源连接。
  2. 调整SQL语句的分隔符,同时增加存储过程存在性校验,修改后的完整SQL如下:
-- 提前删除已存在的同名存储过程,避免重名报错
DROP PROCEDURE IF EXISTS tester;
-- 临时修改语句分隔符为//,避免存储过程内部的;被提前识别
DELIMITER //
CREATE PROCEDURE tester(
  IN is_empty BOOLEAN
)
BEGIN
    IF(is_empty) THEN
        SELECT 
        -- 补全你原本需要查询的字段
        from $dbName.table1
        where KernelName IN ($KernelNameFilter) AND `gpu-id` in ($gpuFilter) AND `Index` in ($DispatchIDFilter) 

        union SELECT
        -- 补全你原本需要查询的字段
        from $dbName.table1
        where KernelName IN ($KernelNameFilter) AND `gpu-id` in ($gpuFilter) AND `Index` in ($DispatchIDFilter);

    ELSE
        SELECT
        -- 补全你原本需要查询的字段
        from $dbName.table1
        where KernelName IN ($KernelNameFilter) AND `gpu-id` in ($gpuFilter) AND `Index` in ($DispatchIDFilter);
    END IF;
END //
-- 改回默认的;分隔符
DELIMITER ;

CALL tester(true);

方法2:替代方案(无需存储过程,更稳定)

如果仅需要实现if/else分支的查询逻辑,完全可以避免使用存储过程,直接通过条件组合实现,不需要修改数据源配置,性能也更好:

-- 这里替换为你实际的分支判断条件,比如对应is_empty=true的场景
SET @is_empty = true;

-- 分支1:is_empty=true时返回union的结果
SELECT 字段1,字段2...
FROM $dbName.table1
WHERE KernelName IN ($KernelNameFilter) AND `gpu-id` in ($gpuFilter) AND `Index` in ($DispatchIDFilter)
AND @is_empty = true

UNION ALL

SELECT 字段1,字段2...
FROM $dbName.table1
WHERE KernelName IN ($KernelNameFilter) AND `gpu-id` in ($gpuFilter) AND `Index` in ($DispatchIDFilter)
AND @is_empty = true

UNION ALL

-- 分支2:is_empty=false时返回单表查询结果
SELECT 字段1,字段2...
FROM $dbName.table1
WHERE KernelName IN ($KernelNameFilter) AND `gpu-id` in ($gpuFilter) AND `Index` in ($DispatchIDFilter)
AND @is_empty = false

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:39:02