自定义函数
使用步骤
1.第一步修改结束符号
基本语法格式 :修改结束符号来写一个自定义函数
DELIMITER 新的结束符号比如$$
自定义函数
新的结束符号
DELIMITER;
修改结束符号用的就是 delimiter
2.第二步,写自定义函数
基本语法格式
REATE FUNCTION 函数名([参数名 参数类型...]) RETURNS 返回值的类型
BEGIN
函数体
RETURN 返回值
END
现在我们来一个完整的例子
DELIMITER $$
CREATE FUNCTION sayhello(name varchar(30)) RETURNS varchar(50)
BEGIN
RETURN CONCAT("HELLO",name,"!");
END
$$
***
DELIMITER;
我们在这里写了一个名为sayhello的函数,并修改了语句结束符号为$$
通过语句SELECT sayhello("JOJO") 就可以调用
删除函数
drop function [if exists] 函数名;
存储过程
这东西和自定义函数类似
相同点
1.可重复执行语句集合
2.只需一次编译即可直接执行
不同点
1.存储过程使用 PROCEDURE(procedure) 自定义函数使用 FUNCTION
2.存储过程没有返回值 函数必须有
3.函数可以设置返回值的类型
4.存储过程使用 CALL调用 函数可以使用SELECT调用
存储过程基本语法
delimiter 新的结束符号
CREATE PROCEDURE 过程名([[IN|OUT|INOUT] 参数名称 参数类型])
BEGIN
过程体
END
新的结束符号
DELIMITER;
参数
其中的三个参数
in | 输入参数 |
out | 输出参数 |
inout | 输入输出参数 |
注意
当形参被定义为OUT 或者 INOUT 时 参数必须是一个变量
用于接收返回给调用者的数据
例子
delimiter $$
CREATE PROCEDURE proc(in sid int)
BEGIN
select id,name from student where id>sid;
END
$$
DELIMITER;
调用存储过程
CALL 数据库名.存储过程名([实参列表])
CALL proc(14); #查看id大于14的学生的id和姓名
查看存储过程
show create procedure 过程名;
存储过程的修改
ALTER procedure 存储过程名 [特征];
#特征在创建或修改时都可以使用
特征
选项 | 描述 |
comment"注释内容" | 注释 |
LANGUAGE SQL | 用sql语句来执行 以后可能扩展其他类型 |
contains sql | 包含除读或写的sql语句 |
no sql | 子程序中不含sql语句 |
reads sql data | 子程序中包含读取数据的语句 |
modifies sql data | 子程序中包含写数据的语句 |
ql security definer | 只有定义者才有权限执行存储过程 |
sql security invoker | 调用者有权执行存储过程 |
简单用一下alter procedure proc sql security invoker;
之后只有调用者有权执行存储过程
删除存储过程
DROP PROCEDURE [IF exists] 存储过程名;