Hello! 欢迎来到小浪云!


MySQL 存储过程替换 JSON 内容时,为什么会出现“大字段信息不存在”的错误?


avatar
小浪云 2024-11-08 73

MySQL 存储过程替换 JSON 内容时,为什么会出现“大字段信息不存在”的错误?

mysql存储过程替换json内容遇到的问题

一位开发者在使用mysql存储过程时遇到了问题,无法替换json内容并显示替换后的文本。问题代码如下:

delimiter // drop procedure if exists `replacename`// create procedure replacename()  begin  declare c int default 0; declare r json ; declare id int default 0; declare i int default 0;  declare result cursor for select id,slider_image from `eb_store_product`;  select count(*) into c from eb_store_product; open  result;  repeat      set i = i + 1;     fetch result into id,r;      set @t = replace(json_extract(r,'$[0]'),'ceshi','chenggong');  until i >= c end repeat;  close result; select @t;  end//  call replacename();// delimiter ;
登录后复制

运行该代码后,会出现以下错误提示:

大字段信息不存在。

解决方案

问题出现在代码中缺少对eb_store_product表中slider_image字段的更新。修改后的正确代码如下:

DELIMITER // DROP PROCEDURE IF EXISTS `replacename`// CREATE PROCEDURE replacename() BEGIN     DECLARE c INT DEFAULT 0;     DECLARE r JSON;     DECLARE id INT DEFAULT 0;     DECLARE i INT DEFAULT 0;      DECLARE result CURSOR FOR SELECT id, slider_image FROM `eb_store_product`;      SELECT COUNT(*) INTO c FROM eb_store_product;     OPEN result;      REPEAT         SET i = i + 1;         FETCH result INTO id, r;          SET @t = REPLACE(JSON_EXTRACT(r, '$[0]'), 'ceshi', 'chenggong');          -- 更新 eb_store_product 表中的 slider_image 字段         UPDATE eb_store_product SET slider_image = JSON_REPLACE(r, '$[0]', @t) WHERE id = id;      UNTIL i >= c     END REPEAT;      CLOSE result;     SELECT @t; END// DELIMITER ;  CALL replacename();
登录后复制

修改后的代码中添加了update语句,用于更新eb_store_product表中对应行的slider_image字段,从而解决了替换json内容后无法显示的问题。

相关阅读