首页 > 解决方案 > MYSQL,使用带有 JSON_TABLE 的函数参数或变量导致错误 1049 (42000):未知数据库

问题描述

我可以将函数参数或参数传递给 MYSQL 的 JSON 函数吗?正如下面所示,当我尝试它时,我得到了一个虚假消息“ERROR 1049 (42000): Unknown database ''”。我确信我可能遗漏了一些明显的东西。我可以用 Oracle 做到这一点。如果我不能直接使用变量,我的选择是什么,我唯一能想到的就是一个临时表,这可能会非常昂贵?

    mysql> select count(*) CNT from JSON_TABLE( '[1,2,3]','$[*]' COLUMNS(I INTEGER PATH '$')) X;
--------------
select count(*) CNT from JSON_TABLE( '[1,2,3]','$[*]' COLUMNS(I INTEGER PATH '$')) X
--------------

+-----+
| CNT |
+-----+
|   3 |
+-----+
1 row in set (0.00 sec)

mysql> set @X = '[4,5,6]';
--------------
set @X = '[4,5,6]'
--------------

Query OK, 0 rows affected (0.00 sec)

mysql> select count(*) CNT from JSON_TABLE( @X,'$[*]' COLUMNS(I INTEGER PATH '$')) X;
--------------
select count(*) CNT from JSON_TABLE( @X,'$[*]' COLUMNS(I INTEGER PATH '$')) X
--------------

+-----+
| CNT |
+-----+
|   3 |
+-----+
1 row in set (0.00 sec)

mysql> drop function if exists COUNT_ROWS;
--------------
drop function if exists COUNT_ROWS
--------------

Query OK, 0 rows affected (0.06 sec)

mysql> DELIMITER $$
mysql> CREATE FUNCTION COUNT_ROWS(X JSON)
    -> returns INTEGER DETERMINISTIC
    -> begin
    ->   DECLARE CNT INTEGER;
    ->   SET CNT = (
    ->   select CNT = count(*)
    ->     from JSON_TABLE(
    ->           X,
    ->           '$[*]'
    ->           COLUMNS (
    ->             I INTEGER PATH '$'
    ->           )
    ->         ) X);
    ->    RETURN CNT;
    -> end;
    -> $$
--------------
CREATE FUNCTION COUNT_ROWS(X JSON)
returns INTEGER DETERMINISTIC
begin
  DECLARE CNT INTEGER;
  SET CNT = (
  select CNT = count(*)
    from JSON_TABLE(
          X,
          '$[*]'
          COLUMNS (
            I INTEGER PATH '$'
          )
        ) X);
   RETURN CNT;
end;
--------------

Query OK, 0 rows affected (0.02 sec)

mysql> --
mysql> DELIMITER ;
mysql> select COUNT_ROWS('[1,2,3]');
--------------
select COUNT_ROWS('[1,2,3]')
--------------

ERROR 1049 (42000): Unknown database ''

标签: mysqljson

解决方案


推荐阅读