定义
为了完成特定功能的 sql语句集。经编译创建并保存在数据库的数据字典中。
特点
没有返回值
没有sql语句调用,只能call调用
不返回结果集
语法
声明语句结束符,可自定义
DELIMITER // or
DELIMITER $$
创建存储过程,存储函数
create procedure 存储过程名(参数)
创建存储过程体
create function 存储过程名(参数)
存储过程开始和结束
BEGIN....END
参数
参数类型: IN,OUT,INOUT
IN 输入参数: 调用时指定,存储过程修改该值不能返回
OUT 输出参数: 不接收传入值,可在存储过程被改变并可返回
INOUT 输入输出参数: 调用时指定,可改变可返回
注意: 参数名不能是列名,否则会被当成列名处理
声明变量
局部变量需要放在存储过程体的开始;
DECLARE variable_name datatype [DEFAULT value]
变量作用域: 仅存在begin...end这段内。
变量赋值
SET 变量名 = 表达式值
注释
用户变量
使用set 或 select 直接赋值,变量名以@开头
变量作用域: 整个会话,全局变量。
set @p_01 = 1
select name,bid into @a1,@a2 from bank limit 1; 变量名和字段名不能一致。
调用存储过程
call 存储过程名[(传参)]
查询存储过程
select name from mysql.proc where db='数据库名'
or
select routine_name from information_schema where routine_schema='数据库名'
or
show procedure status where db='数据库名'
修改存储过程
alter procedure
删除存储过程
drop procedure
栗子
mysql> delimiter $$
mysql> create procedure inout_param(inout p_inout int)
-> begin
-> select p_inout;
-> set p_inout=2;
-> select p_inout;
-> end
-> $$
mysql> delimiter ;