【问题标题】:MYSQL Stored Procedure to Iterate Json Array DataMYSQL 存储过程迭代 Json 数组数据
【发布时间】:2020-01-14 18:05:04
【问题描述】:

我有几列是 json 数组,它们的日期时间数据如下:

["2017-04-18 11:05:00.000000"]
["2017-04-20 11:05:00.000000"]
["2017-04-22 11:05:00.000000"]
["2017-12-11 22:14:02.000000", "2017-12-11 22:14:08.000000", "2017-12-11 22:19:13.000000", "2017-12-11 22:20:44.000000", "2017-12-11 22:21:54.000000", "2017-12-11 22:23:09.000000"]
["2017-12-13 13:21:04.000000"]
["2017-12-14 13:10:44.000000", "2017-12-14 13:21:51.000000"]
["2017-12-15 13:27:21.000000", "2017-12-15 13:30:21.000000"]
["2017-12-16 15:15:22.000000"]

目标是解析出日期时间数据并将其存储到一个单独的表中,我计划从中做一些有趣的事情。目前,它只插入第一条记录,并且插入了大约 180000 次。我当前的代码是:

BEGIN
DECLARE finished INTEGER DEFAULT 0; 
DECLARE i INTEGER DEFAULT 0;
DECLARE usages VARCHAR(4000);

-- declare cursor for employee email
DEClARE curUsages
    CURSOR FOR 
        SELECT associated_usages from usagesTbl where associated_usages not like '[]';

-- declare NOT FOUND handler
DECLARE CONTINUE HANDLER 
    FOR NOT FOUND SET finished = 1;

OPEN curUsages;

getUsages: LOOP
    FETCH curUsages INTO usages;
    IF finished = 1 THEN 
        LEAVE getUsages;
    END IF;
    WHILE i < JSON_LENGTH(usages) DO
        INSERT INTO usagesTbl VALUES (JSON_EXTRACT(usages, CONCAT('$[',i,']')));
        SET i = i + 1;
    END WHILE;
    SET i = 0;
END LOOP getUsages;
CLOSE curUsages;
END;

似乎while循环变量“i”没有增加,我不断陷入循环。我之所以这么想是因为我取出了 JSON_EXTRACT 代码并写了这个用于测试:

set @i = 0;

select JSON_EXTRACT(associated_usages, CONCAT('$[',@i,']')) from usagesTbl where associated_usages not like '[]';

我可以将@i 的值更改为我想要的任何索引,并获得正确的数据。我只是坚持为什么它在存储过程期间在 while 循环中不起作用。非常感谢任何帮助!

【问题讨论】:

    标签: mysql json stored-procedures while-loop cursor


    【解决方案1】:

    不确定这是否是问题所在,但我看到了:

    DEClARE curUsages
    

    应该是这样的:

    DECLARE curUsages
    

    可能是简单的错字吗? (1L

    【讨论】:

    • 不,这是数据类型不匹配,并且表发生了一些错误的事情。不过感谢您的快速回复!
    • 酷,很高兴你发现了这个问题!
    【解决方案2】:

    修好了!它以某种方式创建了一个无限循环,即使存储的过程说它已经完成运行,它也会继续插入数据。我删除并重新创建了表,并将用法的数据类型从 VARCHAR 更改回 json,它就像一个魅力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-07
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      相关资源
      最近更新 更多