创建语法
create procedure 存储过程名(参数列表)
begin
存储过程体(sql语句)
end
注意:1. 参数列表包括三部分(参数模式,参数名,参数类型)
参数模式包括:
IN :该参数需要传入值
OUT:该参数可以作为返回值
INOUT: 该参数既需要传入值,又可以返回值
2. 如果存储体只有一句话,Begin end可以省略
3. 存储体中sql语句必须加分号,存储过程结束的标记可以通过 delimiter 重新设置
调用语法
call 存储过程名(实参列表)
删除语法
语法: drop procedure 存储过程名;
一次只能删除一个。
查看存储过程信息
show create procedure 存储过程名;
函数
函数只能有一个返回,适合做处理数据后返回一个结果
创建语法:
create function 函数名(参数列表) returns 返回类型
begin
函数体
end
参数列表:参数名+类型
函数体:肯定有return 语句
调用语法
select 函数名(参数列表)
查看函数
show create function 函数名;
删除函数
drop function 函数名;
```sql
-------------------------------------------存储过程----------------------------------------------
## 1. 空参列表
## 插入admin五条记录
DELIMITER $
CREATE PROCEDURE myp1()
BEGIN
INSERT INTO admin(`username`,`password`)
VALUES('john',1000),('jack',1001),('tom',1003);
END $
CALL myp1()$
## 2. in模式的参数
## 创建存储过程实现根据女生名查询男生信息
SELECT * FROM beauty;
SELECT * FROM boys;
CREATE PROCEDURE myp2(IN beautyName VARCHAR(20))
BEGIN
SELECT bo.*
FROM boys bo
RIGHT OUTER JOIN beauty b
ON bo.id=b.boyfriend_id
WHERE b.name=beautyName;
END $
CALL myp2('柳岩')$
## 实现用户是否登录成功
CREATE PROCEDURE myp3(IN username VARCHAR(20),IN PASSWORD VARCHAR(20))
BEGIN
DECLARE result INT DEFAULT 0;
SELECT COUNT(*) INTO result
FROM admin
WHERE admin.username=username AND admin.`password`=PASSWORD;
SELECT IF(result>0,'成功登录','登录失败');
END $
CALL myp3('张飞','888')$
## 3. 创建out模式
## 根据女生名返回男生名和男生魅力值
CREATE PROCEDURE myp4(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20),OUT userCP INT)
BEGIN
SELECT bo.boyName,bo.userCP INTO boyName,userCP
FROM boys bo
JOIN beauty b
ON bo.id=b.boyfriend_id
WHERE b.name=beautyName;
END$
CALL myp4('王语嫣',@bname,@userCP)$
SELECT @bname,@userCp$
## 4. 创建inout模式
CREATE PROCEDURE myp6(INOUT a INT,INOUT b INT)
BEGIN
SET a=a*2;
SET b=b*2;
END $
SET @m=10$
SET @n=20$
CALL myp6(@m,@n)$
SELECT @m,@n;
-------------------------------------------函数----------------------------------------------
CREATE FUNCTION myf1() RETURNS INT
BEGIN
DECLARE C INT DEFAULT 0; #定义局部/用户变量作为返回值
SELECT COUNT(*) INTO C
FROM employees;
RETURN C;#赋值返回值
END $
SELECT myf1()$