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

来源:互联网 发布:java uml建模工具 编辑:程序博客网 时间:2024/05/22 15:19

今天有朋友问我用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中的数据被更新了.



原创粉丝点击