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