前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql存储过程和存储函数的使用

mysql存储过程和存储函数的使用

作者头像
93年的老男孩
发布2019-12-18 18:08:05
2.2K0
发布2019-12-18 18:08:05
举报
文章被收录于专栏:用户1214782的专栏

mysql存储过程设置:

delimiter // #将mysql的结束符设置为//

create procedure name(IN | OUT |INOUT str STRING) #定义存储过程名字

begin #开始存储过程

select * from tables; #执行过程

end // #结束存储过程

delimiter ; #将mysql的结束符设置为;

call name(); #存储过程调用

drop procedure if exists name #存储过程删除

mysql储存函数设置:

delimiter // #将mysql的结束符设置为//

create function name(IN | OUT |INOUT str STRING) #定义函数名字

returns int #定义函数返回结果类型

return (select count(*) from tables); #执行过程

// #结束函数

delimiter ; #将mysql的结束符设置为;

select name(); #储存函数调用

drop function if exists name #储存函数删除

实例:

DELIMITER // #将mysql的结束符设置为//

CREATE FUNCTION count_job() #定义函数名字

RETURNS INT #定义函数返回结果类型

RETURN (SELECT COUNT(*) FROM job); #执行过程

// #结束函数

DELIMITER ; #将mysql的结束符设置为;

SELECT count_job(); #储存函数调用

DELIMITER // #将mysql的结束符设置为//

CREATE PROCEDURE add_id(out num INT) #定义存储过程名字

BEGIN #开始存储过程

DECLARE itmp INT; #定义变量

DECLARE cur_id CURSOR FOR SELECT id FROM job; #声明光标

DECLARE EXIT HANDLER FOR NOT FOUND CLOSE cur_id; #定义处理程序

SELECT count_job() INTO num; #执行存储函数并赋值

SET @sum=0; #定义变量

OPEN cur_id; #打开光标

REPEAT #流程控制

FETCH cur_id INTO itmp; #使用光标

IF itmp<10 #流程控制

THEN SET @sum=@sum+itmp; #变量赋值

END IF; #流程控制

UNTIL 0 END REPEAT; #流程控制

CLOSE cur_id; #关闭光标

END // #结束存储过程

DELIMITER ; #将mysql的结束符设置为;

call add_id(@num); #存储过程调用

select @num,@sum; #查询结果

mysql定义处理程序的方式:

#捕获sqlstate_value

declare continue handler for sqlstate '42S02' set @info='NO_SUCH_TABLE';

捕获sqlstate_value,如果遇到sqlstate_value值为42S02执行continue并输出NO_SUCH_TABLE

#捕获mysql_error_code

declare continue handler for 1146 set @info='NO_SUCH_TABLE';

捕获mysql_error_code,如果遇到mysql_error_code值为1146执行continue并输出NO_SUCH_TABLE

#先定义条件,然后调用

declare no_such_table continue for 1146;

declare continue handler for NO_SUCH_TABLE set @info='NO_SUCH_TABLE';

先定义条件,然后调用条件,遇到1146执行continue操作

#使用sqlwarning

declare exit handler for sqlwarning set @info='ERROR';

使用sqlwarning,捕获01开头的sqlstate_value然后执行exit操作并输出ERROR

#使用not found

declare exit handler for not found set @info='NO_SUCH_TABLE';

使用not found,捕获02开头的sqlstate_value然后执行exit操作并输出NO_SUCH_TABLE

#使用sqlexception

declare exit handler for sqlexception set @info='ERROR';

使用sqlexception,捕获没有被sqlwarning和not found捕获的sqlstate_value的值,然后执行exit操作并输出ERROR

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/09/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档