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

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



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在 SQL ,一个过程存储过程或函数)的最大行数通常取决于所使用的数据库管理系统(DBMS)的限制。不同的 DBMS 有不同的限制。 例如,在 MySQL 存储过程的最大行数默认为 65,535 行,但可以通过设置 max_sp_recursion_depth 参数来增加行数。在 Microsoft SQL Server 存储过程的最大行数为 2,097,152 行。 总之,具体的行数限制取决于使用的 DBMS,可以查看相应的文档以获取更多信息。 ### 回答2: 在SQL,一个存储过程的代码行数没有明确的限制。实际上,一个存储过程可以包含任意数量的代码行,具体取决于存储过程的复杂性和功能需求。 存储过程是一段预定义的SQL代码块,用于执行特定的数据库操作。它可以包括声明变量、定义流程控制逻辑、使用循环、条件语句和各种SQL语句等。 存储过程的长度通常是根据数据库管理系统的限制来确定。不同的数据库管理系统可能会有不同的代码行数限制。例如,MySQL数据库存储过程的最大长度为64KB,Oracle数据库一个存储过程的最大长度为2GB。 总体而言,编写存储过程时应该遵循一些最佳实践,以提高代码的可读性和可维护性。这包括使用注释、模块化设计、避免冗余代码和保持代码简洁性等。此外,过长的存储过程可能会导致执行效率下降,因此也应该考虑将代码拆分为多个存储过程或使用其他方式进行性能优化。 总之,在SQL存储过程的代码行数没有明确的限制,而是取决于数据库管理系统的限制和实际需求。 ### 回答3: 在SQL,最大可写的行数取决于数据库管理系统(DBMS)的限制。一般来说,对于大多数常见的DBMS,没有明确的行数限制。然而,实际上编写一个过程时,最大可写的行数还是会有一些限制。 首先,SQL过程的行数限制很大程度上取决于DBMS对于SQL代码长度的限制。每个DBMS都有自己的限制,例如Oracle数据库在PL/SQL过程的限制为32000个字符。 其次,行数的限制还会受到DBMS内存和存储限制的影响。当过程的代码行数超过DBMS的内存和存储限制时,可能会导致运行时错误或性能问题。 此外,实际情况还需考虑到代码的可读性和可维护性。如果一个过程的代码行数过多,不仅会导致代码难以理解和调试,还会增加维护的难度。因此,在编写SQL过程时,建议尽量保持代码简洁、清晰和可读性。 总之,SQL过程的最大行数没有固定的限制,取决于DBMS的限制、内存和存储限制以及代码的可读性和可维护性。在实际应用,应根据需求和DBMS的限制来合理规划和设计SQL过程的代码行数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java_wucao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值