mysql遍历数组执行更新(存储过程)

mysql遍历数组执行更新(存储过程),第1张

CREATE PROCEDURE init_reportUrl()

BEGIN

DECLARE s INT DEFAULT 0

DECLARE r_id bigint(10)

DECLARE report CURSOR FOR select distinct id as r_id FROM ReportHotLine

-- 声明当游标遍历完后将标志变量置成某个值

DECLARE CONTINUE HANDLER FOR NOT FOUND SET s=1

-- 打开游标

open report

-- 将游标中的值赋值给变量,注意:变量名不要和返回的列名同名,变量顺序要和sql结果列的顺序一致

fetch report into r_id

-- 当s不等于1,也就是未遍历完时,会一直循环

while s<>1 do

-- 执行业务逻辑

UPDATE wh_csyx . dy_pres30207800013_001_local a

JOIN ReportHotLine b ON a.gdId = b.ID

AND b.createtime = ( SELECT max( createtime ) FROM ReportHotLine WHERE ID = r_id )

SET blms = b.banliInfo where a.gdId =r_id

-- 将游标中的值再赋值给变量,供下次循环使用

fetch report into r_id

-- 当s等于1时表明遍历以完成,退出循环

end while

-- 关闭游标

close report

END

call init_reportUrl()

目前我只测试了 while 循环:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

delimiter $$// 定义结束符为 $$

drop procedure if exists wk// 删除 已有的 存储过程

create procedure wk()//  创建新的存储过程

begin

declare i int// 变量声明

set i = 1 

while i <11 do // 循环体

insert into user_profile (uid) values (i)

set i = i +1

end while

end $$ // 结束定义语句

// 调用

delimiter // 先把结束符 回复为

call wk()

delimter : mysql 默认的 delimiter是告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了。

这里使用 delimiter 重定义结束符的作用是: 不让存储过程中的语句在定义的时候输出。

创建 MySQL 存储过程的简单语法为:

?

1

2

3

4

5

6

7

CREATE PROCEDURE 存储过程名称( [in | out | inout] 参数 )

BEGIN

Mysql 语句

END

调用存储过程:


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/8538368.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-17
下一篇 2023-04-17

发表评论

登录后才能评论

评论列表(0条)

保存