大家好,欢迎来到IT知识分享网。
目录
一、什么是存储程序?
存储程序指的是一组存储和执行在数据库服务器端的程序。存储程序总是在服务器的进程或线程的内存中执行的。
二、为什么使用存储程序?
优点:
- 执行效率高;
- 简化开发。
缺点:
- 占用服务器端资源;
- 数据迁移时需跟着一并迁移。
三、存储程序分类
存储程序分为3类,分别是:
- 存储过程:有输入和输出参数,可以执行一组sql语句。
- 存储函数:有一个返回值,可以执行一组sql语句,可以传递参数。
- 触发器:执行一组sql语句,由事件驱动自动执行,不能传递参数。
四、存储过程
1.存储过程参数的3中模式
in:输入,默认
out:输出
inout:输入输出
2.流程控制语句
2.1 条件语句
if 条件 then #代码,分号结尾 elseif 条件 then #代码,分号结尾 else #代码,分号结尾 end if;
2.2 循环语句
# while ... do ... end while; while 条件 do #代码,分号结尾 end while; #loop #lip:是给当前loop循环取得别名 别名:loop if 条件 then leave 别名;#结束循环 end if; end loop; #repeat repeat until 条件;#条件满足结束循环 end repeat;
3.示例代码
创建关键词:procedure
调用关键词:call
#存储过程声明及调用 #根据员工的姓名查询职位信息 delimiter //;#设置分隔符,以//作为一句代码的结束标志 #声明存储过程关键词procedure,参数模式默认是in create procedure sel_job(name varchar(20)) begin select job from emp where ename = name; end; call sel_job('scott');#调用存储过程 #根据员工的姓名查询职位信息 delimiter //; #第一个参数模式是in,第二个参数模式是out create procedure sel_job2(name varchar(20), out e_job varchar(20)) begin #关键词into,可将jobde值赋给变量e_job select job into e_job from emp where ename = name; end; call sel_job2('scott', @e_job);#@e_job 定义一个临时变量来接收传出来的值 select @e_job; #根据员工的姓名查询职位信息 delimiter //; #声明存储过程关键词procedure,参数模式默认是in create procedure sel_job3(inout name_job varchar(20)) begin #以变量name_job的值作为检索条件,into将值赋给变量name_job select job into name_job from emp where ename = name_job; end; set @name='scott';#定义name变量并赋值 call sel_job3(@name);#使用变量 select @name; #存储过程语法:if / 循环 #if:成绩分级 80 A /60 B /C create procedure score(sc int) begin declare v_level varchar(20);#变量声明 #set v_level = 'A';#变量赋值 if sc >= 80 then set v_level = 'A'; elseif sc >= 60 then set v_level = 'B'; else set v_level = 'C'; end if; select v_level;#展示变量值 end; call score(89); call score(69); #循环语句:1+2+…+100 delimiter //; create procedure calc() begin declare i int; declare sum int; set i = 1; set sum = 0; while i <= 100 do set sum = sum + i; set i = i + 1; end while; select sum; end; call calc(); delimiter //; create procedure calc2() begin declare i int; declare sum int; set i = 1; set sum = 0; #lip:是给当前loop循环取得别名 lip:loop set sum = sum + i; set i = i + 1; if i > 100 then leave lip; end if; end loop; select sum; end; call calc2(); 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 > 100; end repeat; select sum; end; call calc3();
五、存储函数
创建关键词:function
调用关键词:作为sql语句的一部分进行调用
示例代码:
#存储函数(根据雇员的编号查询名称) delimiter //; create function func_emp(eno int) returns varchar(20) deterministic #确定的,如果函数多次输入同一个参数值,得到的结果是一致的,表示确定的 begin declare name varchar(20); select ename into name from emp where epmno = eno; return name; end; #调用:作为sql语句的一部分进行调用 select func_emp(7788);
六、触发器
关键关键词:tigger
#触发器 #删除student表记录,将删除记录添加到bak表中。 #创建备份表 create table stu_bak select * from student where 1=0; #定义触发器 delimiter //; create tigger tri_stu #事件包括这些:before|after insert|update|delete after delete on student for each row #行级触发器 begin #封装了值的对象:old | new insert into stu_bak values(old.sid,old.sname,old.cid); end; #开始触发 delete from student where sid=5;
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/120204.html