概念类似函数,就是把一段代码封装,当需要调用这段代码是,通过存储成功来实现
在封装的语句中,可以由if/else case while 等控制结构,进行sql编程
存储过程特点
- 执行效率特别快,存储过程时在数据库的服务器端执行
- 移植性很差,不同数据库的存储过程时不能移植的
创建存储过程:
要自定义结束符
修改结束符 delimiter
delimiter $
创建:
create procedure 存储过程名( 参数)
begin
sql 语句;
end $
调用
call 存储过程名$
删除存储过程
drop PROCEDURE 存储过程名$
例子:
1.创建存储过程,查询emp标配的所有数据
delimiter $
CREATE PROCEDURE p1()
BEGIN
SELECT * FROM emp;
END $
CALL p1();
2. 有参
查询薪资大于参数n的记录
delimiter $
CREATE PROCEDURE p2(n INT)
BEGIN
SELECT * FROM emp WHERE sal >n;
END $
CALL p2(2000)
3.控制结构
参数 n 薪资, j 类型
如果j='h',查询薪资高于n的记录
否则,查询薪资低于n的记录
delimiter $
CREATE PROCEDURE p3(n INT ,j CHAR(1))
BEGIN
if j='h' THEN
select * from emp where sal>n;
else
select * from emp where sal<n;
end if;
end $
调用
CALL p3(2000,'h')
4,循环结构
--计算1->n的和
delimiter $
CREATE PROCEDURE p4( n int)
BEGIN
DECLARE i INT;
DECLARE s INT;
SET i = 1;
SET s = 0;
WHILE i<=n DO
SET s =s+i;
SET i = i+1;
END WHILE;
SELECT s;
END $
CALL p4(10)