当前位置: 首页 > 知识库问答 >
问题:

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

凤财
2023-05-02
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个答案

陶博赡
2023-05-02

你的代码里在存储过程的时候没有更新 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();
 类似资料:
  • 主要内容:查看存储过程的状态,查看存储过程的定义创建好存储过程后,用户可以通过 SHOW ATATUS 语句来查看存储过程的状态,也可以通过 SHOW CREATE 语句来查看存储过程的定义。本节主要讲解查看存储过程的状态和定义的方法。 查看存储过程的状态 MySQL 中可以通过 SHOW STATUS 语句查看存储过程的状态,其基本语法形式如下: SHOW PROCEDURE STATUS LIKE 存储过程名; 用来匹配存储过程的名称,LI

  • 本文向大家介绍在React中你有遇到过安全问题吗?怎么解决?相关面试题,主要包含被问及在React中你有遇到过安全问题吗?怎么解决?时的应答技巧和注意事项,需要的朋友参考一下 预防xss攻击

  • 本文向大家介绍MySQL存储过程的权限问题小结,包括了MySQL存储过程的权限问题小结的使用技巧和注意事项,需要的朋友参考一下 MySQL的存储过程,没错,看起来好生僻的使用场景。问题源于一个开发同学提交了权限申请的工单,需要开通一些权限。 本来是一个很正常的操作,但在我来看是比较着急且紧迫的,说来惭愧,忙着方向规划和开发的事情,这个基础的操作功能竟然给忽略了,所以看到目前的一些实现方式,还是希望

  • 我已经成功地设置了Elasticsearch、Kibana等,当我运行:'sudo systemctl status Elasticsearch'时,它都运行得很好。 但是,当我执行“sudo systemctl status logstash”时,这是输出: 它无法启动logstash,我在网上读了很多文章,说这可能与路径或配置有关,但我没有找到一个正确的工作解决方案。 我已经下载了JDK,并遵

  • 问题描述 1、本地启动spring 应用程序 可成功连接容器中的 mysql 数据库 2、Docker Compose部署的容器内Spring Boot应用程序无法访问 另一个容器的 MySQL 说明:两个容器在同一个docker内 docker-compose.yml 配置文件如下: application.yml 内容 : 请问哪里的配置有问题 ?

  • 而不是亚洲字符。即使是欧洲文本,我也用表示 奇怪的胡言乱语(mojibake?)如或的