存储程序
概念:存储程序指的一组存储和执行在数据库服务器端的程序。
分类 1.存储过程 2.存储函数 3.触发器
存储过程
1.基本语法
CREATE PROCEDURE sel_emp(参数列表)
BEGIN
—操作
END;
2.使用
无参的存储过程:
CREATE PROCEDURE sel_emp()
BEGIN
select from emp where deptno = 10;
END;
—存储过程的调用
call sel_emp();
有参的存储过程:
—根据部门编号查询员工信息
CREATE PROCEDURE sel_emp2(dno int)
BEGIN
select from emp where deptno=dno;
END;
—调用存储过程
call sel_emp2(30);
—根据员工编号查询员工的名称
CREATE PROCEDURE sel_emp3(eno int,OUT name varchar(20))
BEGIN
select ename into name from emp where empno=eno;
end;
—调用
call sel_emp3(7788,@name);
select @name;
—根据员工编号查询所在部门的编号
CREATE PROCEDURE sel_emp4(INOUT eno int)
BEGIN
select deptno into eno from emp where empno = eno;
END;
—调用
set @eno = 7788;
call sel_emp4(@eno);
select @eno;
—分支语句
CREATE PROCEDURE cal_score(score int)
BEGIN
— 声明变量
DECLARE levels varchar(20);
— 分支
IF score >= 90 THEN
— 赋值
set levels = ‘优秀’;
ELSEIF score >= 80 THEN
set levels = ‘良好’;
ELSE
set levels = ‘不通过’;
END IF;
— 输出
select levels;
END;
—while循环
create PROCEDURE calc()
BEGIN
— 声明两个变量
DECLARE sum int;
DECLARE count int;
— 初始化
set sum = 0;
set count = 1;
— 循环
while count <=100 DO
set sum = sum + count;
set count = count + 1;
END WHILE;
SELECT sum;
END;
—LOOP
create PROCEDURE calc1()
BEGIN
— 声明两个变量
DECLARE sum int;
DECLARE count int;
— 初始化
set sum = 0;
set count = 1;
— 循环
lip:LOOP
set sum = sum + count;
set count = count + 1;
IF count > 100 THEN
LEAVE lip;
END IF;
END LOOP;
SELECT sum;
END;
call calc1();
create PROCEDURE calc3()
BEGIN
— 声明两个变量
DECLARE sum int;
DECLARE count int;
— 初始化
set sum = 0;
set count = 1;
— 循环
REPEAT
set sum = sum + count;
set count = count + 1;
UNTIL count > 100
END REPEAT;
SELECT sum;
END;
3.参数模式
in:外部传进存储过程
out:传出
inout:传进传出
4.游标
—查询所有员工的姓名
create PROCEDURE emp_cursor4()
BEGIN
DECLARE name varchar(20);
DECLARE DONE boolean default 0;
— 声明游标类型变量存储所有员工的名称
DECLARE emp_cursor CURSOR for select ename from emp;
— 结束设置状态码为1
DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000’ SET DONE = 1;
— 打开游标
open emp_cursor;
— 获取游标中维护的值
lip:LOOP
FETCH emp_cursor into name;
IF DONE THEN
leave lip;
END IF;
select name;
END LOOP;
— 关闭游标
close emp_cursor;
END;
存储函数
—函数(确定的不变的 DETERMINISTIC Not )
create FUNCTION emp_func()
RETURNS VARCHAR(20)
DETERMINISTIC
BEGIN
DECLARE name varchar(20);
select ename into name from emp where empno = 7788;
RETURN name;
END;
select emp_func();
函数有返回值 return
存储过程可以单独使用;但是函数只能作为语句的一部分。