Page 4 of 16
存储过程和函数文档
----------------------------------------------------------------------------------------------------------------------------- -------------------
上海爱可生----软件部
2.2 存储过程与权限表
创建存储过程或函数后被保存在 mysql 库的 proc 表中,查看该表可以获得存储过程或函数的创建信息。要创建存
储过程则必须要有 create_routine 权限,修改存储过程则需要有 alter_routine 权限,执行存储过程则需要有
execute 权限,删除则需要 drop 权限。
3. 存储过程和函数的语法
3.1 创建存储过程和函数
create procedure proc_name([[in|out|inout] params_list…… params_type])
[SQL SECURITY {DEFINER|INVOKER}]
[comment ‘descriptions the routine’]
begin
statement_list ……….
end;
create function func_name(params_list…… params_type) returns type
begin
statement_list ………
return value;
end;
存储过程和函数是用 create procedure 和 create function 语句创建的。一个存储程序要么是一个存储过程,要么是
一个函数。使用 CALL 语句来调用存储过程,存储过程只能用输出变量传回值。函数可以被从语句外调用,函数能
返回标量值。存储过程也可以调用其它存储过程或函数。
存储过程中的 use 语句是不允许的。也可以将存储过程创建在某一个库中。比如 test_proc 创建在 test 库中,那么
调用的方式为:call test.test_proc。当删除一个库时,该库中的存储程序都将被删除。
括号内的参数列必须总是存在。如果没有参数,也需要使用一个空参数列()。存储过程每个参数默认都是一个 IN
参数。要指定为其他参数,可在参数名之前使用关键词 OUT 或 INOUT。而函数则都是 in 参数,无需指定,若指定
了 in 或者 out 反而会报错。
SQL SECURETY 特征可以用来指定存储过程该用创建存储过程的许可来执行,还是使用调用者的许可来执行。默认
值是 DEFINER。如果一个用户写的存储过程,想要其他用户也能够调用的话,则必须定义 SQL SECURITY INVOKER。
COMMENT 子句用来描述存储程序。这个信息被 show create procedure 和 show create function 语句来显示。
要创建函数,则需要开启 log_bin_trust_function_creators 参数为 on,该参数的含义是信任函数中的操作,默认情
况下,该参数为关闭,创建函数时会报错。函数中不能包含 select 语句和 DDL 语句,否则会报错。
案例 1:创建一个简单的存储过程,带一个输出参数
delimiter $$
create procedure proc1(out param1 int)
begin
select count(*) into param1 from mysql.user;
end;
$$