2.2 存储过程相关语法
#创建存储过程
delimiter $ #指定分隔标识符为 $
create procedure 存储过程名([参数类型 参数名 数据类型,...])
#参数类型可以分为:IN,OUT,INOUT
begin
#存储过程体:
#一组合法的SQL语句,每条SQL语句结尾必须添加分号
end $
#如果存储过程体只有一句话,begin,end 可以省略。
#调用存储过程
call 存储过程名(参数类型 参数名 数据类型) $
select @def_name $ #@def_names是存储过程参数列表中标识为out或inout类型的参数
delimiter ; #回复分隔符为常规使用的分号
#删除存储过程
drop procedure [if exists ]pro_name;
#查看存储过程的定义信息
show create procedure pro_name;
#查看当前数据库中的存储过程信息
show procedure status [like 'pattern'|where expr];
关于delimiter(手册13.1.17 P2241)
The example uses the mysql client delimiter command to change the statement delimiter from ; to // while the procedure is being defined. This enables the ; delimiter used in the procedure body to be passed through to the server rather than being interpreted by mysql itself.
delimiter 命令仅用于指定当前mysql客户端识别一条语句的标识,当指定 $ 为客户端的分隔标识后,存储过程体中的';'仍然会被服务器端所识别,因为服务器端仍然以分号作为一条sql语句的标识。分号与其他具体的存储过程体是作为一个整体直接传送到服务器端的,不会在客户端进行解析。