查看所有存储过程和函数:
select name from mysql.proc where db=‘stu’ and type=‘function’
select name from mysql.proc where db=‘stu’ and type=‘procedure’
查看存储过程和定义的函数:
show create function 函数名;
show procedure 存储过程名;
查看存储过程和函数的信息:
show function status [like ' '];
show procedure status [like ' '];
删除 : drop function/procedure if exists 函数名;
delimiter $$ (将函数语句中的分隔符先由‘;’改为‘$$’)
create function 函数名( ) returns 返回值类型 (不是return)
begin
函数体; (函数语句集,使用@ 定义变量)
return val; (只能是一个值)
end $$
delimiter ; (将函数语句中的分隔符再改回‘;’)
select 函数名( ); -------------------直接调用函数 即可得到返回值
变量定义:
用户变量(相当于全局变量),在函数外边定义;例如 set @s=1;set表示赋值的意思。
局部变量在函数内部定义,例如 declare a[变量名] int[变量类型];
局部变量的赋值方式有 2 种:set s=(select 语句) 或者 select 语句 into a[变量名];
查看变量:select @s;(相当于print)
create function 函数名(形参名1 类型1,形参名2 类型2) returns 返回值类型
函数体中使用的函数语句集,例如:
select age from table91 where id= 形参名1
调用:函数名(实参1,实参2);
将函数中function改为procedure 即可,且无返回值!
调用:call 存储过程名();
存储过程的参数分为三类(输入in;输出 out;即可输入有可以输出 inout)
in(只能进去): 外部传递给形参的值在存储过程内部可以直接使用;
存储过程函数的内部对形参的修改不影响外部的实参值。
out(只能出来): 外部实参传递给形参的值在存储过程内部不可用;
外部调用函数时 ,必须传入变量,传常量会报错!
存储过程函数的内部对形参的修改会影响(修改)外部的实参值。
例如 create procedure proc_name (out age int)