mysql定义异常/表不存在异常/延时函数/now()-sysdate()

本文介绍了一个MySQL存储过程示例,该过程使用了SLEEP函数实现延时,并对比了NOW()与SYSDATE()两个时间函数的区别。此外,文章还讲解了如何处理存储过程中可能遇到的特定错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

delimiter $$
drop procedure if exists lims_data.sp_test_100$$
create procedure lims_data.sp_test_100(
										out	cur_time1	bigint unsigned,
										out	cur_time2	bigint unsigned,
										out cnt			int unsigned
										)
begin
	declare _sleep	int unsigned default 0;
	declare continue handler for 1146
		begin
		end;

	select now() + 0 into cur_time1;
	select count(*) into cnt from lims_data.abscafase;

	while cur_time1 + 5 >= (now() + 0) do
		set _sleep = SLEEP(1);
	end while;
	select now() + 0 into cur_time2;
	
end $$
delimiter ;



call lims_data.sp_test_100(@a, @b, @c);
select @a, @b, @c;


select sysdate(), now(), sleep(1), now(), sysdate();


总结:

1:异常可以由多种值来触发

DECLARE handler_action HANDLER
 FOR condition_value [, condition_value] ...
statement

handler_action:
 CONTINUE
 | EXIT
 | UNDO

condition_value:
 mysql_error_code
 | SQLSTATE [VALUE] sqlstate_value
 | condition_name
 | SQLWARNING
 | NOT FOUND
 | SQLEXCEPTION

2:可以定义多个continue handler 但是 对于一个触发条件只能定义一个handler

 

3:set _sleep = SLEEP(1); 延时函数 以前用的比较少 要它时还真不能少

 

4:now()和sysdate()都是显示当前时间

区别:now()显示执行开始的时间

sysdate()显示当前执行时间

 

eg:  如果一个sql块执行需要10s   now()显示的是10s前的时刻 而sysdate()显示的是当前时刻

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值