mysql存储过程遇到问题,谁来看看怎么解决?

作者站长头像
站长
· 阅读数 9
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 ;

上述代码,就是想实现取出数组内文本并替换部分内容,然后显示替换后的文本。结果提示显示失败。提示大字段信息不存在。

哪位大佬来看看怎么解决 ...= =....

回复
1个回答
avatar
test
2024-07-04

你的代码里在存储过程的时候没有更新 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();
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容