一,存储函数的创建,调用,查看,修改,删除
1,创建存储函数
drop function if exists func_name; #如果存储函数存在,删除存储函数
delimiter // #声明存储函数的结束符为//,可自定义
create function func_name([func_parameter])
returns type #函数返回的数据类型
[characteristic ...] #存储函数特性,创建时一般省略,默认系统设置
begin #程序主体开始
#中间可写逻辑,包括定义变量,变量赋值,定义条件及处理程序,定义光标及流程控制
return value; #存储函数可以通过 return 语句返回函数值,主要用于计算并返回一个值,可以是一个查询结果值
end// #程序结束标识符
delimiter;
'''
1, func_parameter #指定存储函数的参数列表,如下:
in | out | inout param_name type #in,out,inout 输入输出,param_name 字段名 type 字段类型
但是,存储函数默认为in,且参数不写in 没有out,inout
2, DELIMITER//和DELIMITER;两句, DELIMITER是分割符的意思,因为MySQL默认以";"为分隔 符,如果我们没有声明分割符,
那么编译器会把存储函数当成SQL语句进行处理,则存储函数的编译过程会报错,所以要事先用DELIMITER关键字申明当 前段分隔符,
这样MySQL才会将";"当做存储函数中的代码,不会执行这些代码,用完了之后要把分隔符还原。
3,存储函数的特性 characteristic:
COMMENT 'string' 表示注释信息
| LANGUAGE SQL 当前系统支持的语言为sql
| [NOT] DETERMINISTIC 存储过程执行结果是否确定,DETERMINISTIC 确定,相同的输入会得到相同的输出 [NOT] DETERMINISTIC 不确定
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } 子程序使用的sql 语句的限制
CONTAINS SQL: 子程序包含sql语句,但不包含读或写数据的语句
NO SQL: 子程序不包含sql语句
READS SQL DATA: 子程序包含读数据的语句
MODIFIES SQL DATA: 子程序包含写数据的语句
| SQL SECURITY { DEFINER | INVOKER } 指明谁有权限执行存储函数 DEFINER 只有定义者才能执行 INVOKER 有权限的调用者可执行
4,程序主体可以用begin开始,end结束,return返回
'''
#简单的例字
drop function if exists id;
delimiter //
create function id(re_name varchar(20))
returns int(20)
begin
declare itep int(20); #定义变量
declare not_found condition for 1146; #定义条件
declare exit handler for not_found set @info='no_such_table'; #定义处理程序
select id into itep from sch where name =re_name; #变量赋值
return itep; #返回
end//
delimiter; #恢复结束符
2,调用存储函数
select id('xiaojun'); #select 调用存储函数的关键字 add_id 存储函数名称
'''
注意事项:
1)存储函数名称后面必须加括号&#