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

2019-12-18 18:08:05 浏览数 (1)

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

0 人点赞