存储程序
1.什么是存储程序
- 存储程序指的一组存储和执行在数据库服务器端的程序。存储程序总是在服务器的进程或者线程的内存中执行的。
- 优点:
- 简化sql开发
- 效率提高
- 缺点:
- 数据迁移麻烦
- 占用服务器资源
- 对数据库影响较大
2.[存储]过程
- 有输入和输出参数,存储一组sql操作,独立调用。
#声明 delimiter //; create procedure pro_emp() begin select * from emp; end; //
#调用 call pro_emp();
delimiter //; create procedure pro_emp_no(eno int) begin select ename from emp where empno=eno; end;
call pro_emp_no(7369);
参数三种模式: IN:输入模式(默认) OUT:输出模式 INOUT:输入输出模式 elimiter //; create procedure sel_emp(eno int,out en varchar(20)) begin select ename into en from emp where empno = eno; end;
#调用 call sel_emp(7788,@name); select @name;
#根据员工姓名查询职位 delimiter //; create procedure sel_emp2(inout en_job varchar(20)) begin select job into en_job from emp where ename = en_job; end; #调用 set @name_job='scott'; call sel_emp2(@name_job); select @name_job;
分支: if delimiter //; create procedure score(score int,out level varchar(20)) begin if score>=80 then set level='A'; elseif score>=60 then set level ='B'; else set level = 'C'; end if; end; 循环: #while 1+2+...+10 delimiter //; create procedure calc1() begin #声明变量 declare i int; declare sum int; #赋值 set i=1; set sum=0; #循环 while i<=10 do set sum=sum+i; set i=i+1; end while; select sum; end;
call calc1();
#loop delimiter //; create procedure calc2() begin #声明变量 declare i int; declare sum int; #赋值 set i=1; set sum=0; #循环 lip:loop set sum = sum + i; set i = i+1; if i>10 then leave lip; end if; end loop; select sum; end;
call calc2();
#repeat delimiter //; create procedure calc3() begin #声明变量 declare i int; declare sum int; #赋值 set i=1; set sum=0; #循环 repeat set sum = sum + i; set i = i+1; until i>10 end repeat; select sum; end; call calc3(); |
3.[存储]函数
- 有返回值。
delimiter //; create function sel_name(eno int) returns varchar(20) #返回值类型 DETERMINISTIC #确定的 begin declare v_name varchar(20); select ename into v_name from emp where empno = eno; return v_name; end;
select sel_name(7788); |
4.触发器
- 由事件驱动(不能手动调用)