我试图在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
我确信这个问题与我的语法无关,但下面是查询的外观:
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、.)
发布于 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变量为参数的过程,并在过程正文中的查询中使用它们--而不是每次需要运行过程时都创建一个全新的过程。
https://stackoverflow.com/questions/69005822
复制相似问题