MySql中一个简单的存储过程刷数据库数据

xiaoxiao2021-02-28  75

今天有朋友问我用orcale存储过程刷数据库数据怎么写的,他的要求是两张表,一张表里面字段为空的话,就从另外一张表中取数据更新这个表.orcale中写完之后,突然想到在mysql中怎么写呢,于是在网上找了一下资料.特意在此记录一下写法.(orcale的待会也补上!!!)

因为原来mysql中就有两张表,就懒得建表了.修改两张表的数据如下:

现在如果email表中的content为空的话,就用student表中的fenshu更新数据,代码如下:

create procedure my_procedure() -- 创建存储过程   begin -- 开始存储过程   declare my_id int; -- 自定义变量1   declare my_content varchar(50); -- 自定义变量2   DECLARE done INT DEFAULT FALSE; -- 自定义控制游标循环变量,默认false     DECLARE My_Cursor CURSOR FOR (select id,content from email where content is null or content = ''); -- 定义游标并输入结果集 结果集越少越好 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 绑定控制变量到游标,游标循环结束自动转true      OPEN My_Cursor; -- 打开游标     myLoop: LOOP -- 开始循环体,myLoop为自定义循环名,结束循环时用到       FETCH My_Cursor into my_id, my_content; -- 将游标当前读取行的数据顺序赋予自定义变量12       IF done THEN -- 判断是否继续循环         LEAVE myLoop; -- 结束循环       END IF;       -- 自己要做的事情,在 sql 中直接使用自定义变量即可       -- if(my_content is null or my_content = '') then 这样写的循环次数太多了       update email set content = (select fenshu from student where id = my_id) where id = my_id;       COMMIT; -- 提交事务    -- end if;     END LOOP myLoop; -- 结束自定义循环体     CLOSE My_Cursor; -- 关闭游标   END; -- 结束存储过程  

-- sql 执行存储过程    call my_procedure();   

-- select * from email  -- sql 删除存储过程   drop procedure my_procedure; 

编译过后执行存储过程,结果如图:

可以清楚的发现email中的数据被更新了.

转载请注明原文地址: https://www.6miu.com/read-48956.html

最新回复(0)