首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在查询中创建过程

在查询中创建过程
EN

Stack Overflow用户
提问于 2021-08-31 22:13:50
回答 1查看 222关注 0票数 0

我试图在Granada查询中实现一个MySQL过程(使用if/语句)。唯一的问题是它不允许我创建我的过程并从同一个查询中调用它.

错误

db query error: Error 1064: 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 'CALL tester(true)' at line 44

我确信这个问题与我的语法无关,但下面是查询的外观:

代码语言:javascript
复制
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;

CALL tester(true);

它们似乎是独立工作的,但我不知道为什么Grafana不喜欢这种语法。有什么想法吗?

注意:是的,我需要在Grafana查询b/c中创建过程,我需要引用本地Grafana变量(即$KernelNameFilter、$gpuFilter、.)

EN

回答 1

Stack Overflow用户

发布于 2021-08-31 23:17:43

很可能无法在对查询接口的单个调用中创建过程并调用该过程。大多数查询接口不支持多查询.

即使查询接口支持多个查询,也不能使用它来定义存储的例程。多查询接口假设分号终止语句,因此过程正文中的第一个分号将终止整个CREATE语句。这不是你想要的。

MySQL客户端通过要求您将语句终止符更改为没有出现在CREATE语句正文中的内容来解决这个问题。详情请参见https://dev.mysql.com/doc/refman/8.0/en/stored-programs-defining.html

I需要引用局部Grafana变量(即$KernelNameFilter,$gpuFilter,.)

您应该创建一个以Grafana变量为参数的过程,并在过程正文中的查询中使用它们--而不是每次需要运行过程时都创建一个全新的过程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69005822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档