用于迭代Json数组数据的MYSQL存储过程

用于迭代Json数组数据的MYSQL存储过程,mysql,json,stored-procedures,while-loop,cursor,Mysql,Json,Stored Procedures,While Loop,Cursor,我有两列是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-1

我有两列是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;

我可以将@I的值更改为我想要的任何索引,从而获得正确的数据。我只是想知道为什么它在存储过程中不能在while循环中工作。非常感谢您的帮助

不确定这是否是问题所在,但我发现:

DEClARE curUsages
应该是这样的:

DECLARE curUsages

可能是简单的打字错误吗?(用于
L
1

修复了它!它以某种方式创建了一个无限循环,即使存储的proc说它已经运行完毕,它也会继续插入数据。我删除并重新创建了该表,并将usages的数据类型从VARCHAR更改回json,它的工作非常出色

不,这是数据类型不匹配,表中出现了一些错误。谢谢你的快速回复!酷,很高兴你发现了问题!!
DECLARE curUsages