定义
- 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集。
- 经过第一次编译后调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
- 类似于java中的方法,sql的封装和重用,有输入输出参数,可以声明变量,有流程控制if/else/case/while等语句,可以实现复杂的逻辑功能
特点
1.能完成较复杂的判断和运算
2.可编程行强,灵活
3.SQL编程的代码可重复使用
4.执行的速度相对快一些
5.减少网络之间的数据传输,节省开销
创建存储过程
create procedure procedure_name()
begin
.........
end
调用存储过程
call procedure_name();
删除存储过程
drop procedure procedure_name
简单存储过程实例
create procedure simple_procedure()
begin
select * from user;
select * from apply_info;
end;
call simple_procedure();
drop procedure simple_procedure;
声明变量
1.变量的声明使用declare,一句declare只声明一个变量,变量必须先声明后使用;
2.变量具有数据类型和长度,与mysql的SQL数据类型保持一致,因此甚至还能制定默认值、字符集和排序规则等;
3.变量可以通过set来赋值,也可以通过select into的方式赋值;
4.变量需要返回,可以使用select语句,如:select 变量名。
5.存储过程中变量是有作用域的,作用范围在begin和end块之间,end结束变量的作用范围即结束。
create procedure declare_procedure()
begin
-- 使用 declare语句声明一个变量
declare username varchar(32) default '';
-- 使用set语句给变量赋值
set username='dalao';
-- 将users表中id=1的名称赋值给username
select ifnull(name,'dalao') into username from user where id=1;
select username;
end;
存储过程参数
1.传入参数,类型为IN,默认就是IN类型
2.返回值,类型OUT
3.如果既需要传入,同时又需要传出,则可以使用INOUT类型参数
create procedure 名称([IN|OUT|INOUT] 参数名 参数数据类型 )
begin
.........
end
create procedure para_procedure(IN userid int,OUT username varchar(32))
begin
select ifnull(name,'dalao') into username from user where id=userid;
end;
SET @username='';
call para_procedure(1,@username);
SELECT @username as name;
声明异常处理
语法
处理类型:继续CONTINUE,退出EXIT
触发条件:SQLSTATE,MYSQL ERROR,CONDITION
1.MYSQL错误代码
2.ANSI-standard SQLSTATE code
3.命名条件。可使用系统内置的SQLEXCEPTION,SQLWARNING和NOT FOUND
错误触发的操作:actions
DECLARE
{EXIT | CONTINUE}
HANDLER FOR
{error-number | SQLSTATE error-string | condition}
SQL statement
实例
sql报错,设置返回值
CREATE DEFINER=`root`@`%` PROCEDURE `test`(OUT a_success varchar(1), OUT a_message longtext)
begin
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
SET A_MESSAGE = '执行错误';
end;