第11章MySQL存储过程与函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库系统原理及MySQL应用教程(第2版)
课后习题参考答案
第11章MySQL存储过程与函数
1、存储过程和存储函数是在数据库中定义一些被用户定义的SQL语句集合。
二者存在以下几个区别:
1)存储过程实现的功能要复杂一点,而函数实现的功能针对性比较强。
2)存储过程可以返回参数,而函数只能返回值或者表对象。
3)存储过程可以使用非确定函数,不允许在用户定义函数主体中内置非确定函数。
4)存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用。
2、创建一个存储过程,根据学生的学号查询学生的姓名
create PROCEDURE getnamebysno(in xh char(10),out name char(20)) BEGIN
select sname into name from student where sno=xh;
调用该存储过程:call getnamebysno(‘1101’);
创建一个名为numstu的存储函数,查询学生的人数
Create function numstu()
Returns integer
Begin
Return(select count(*) from student);
调用:select numstu()
3、存储过程的优点:
◆存储过程增强了SQL语言的功能和灵活性
◆存储过程能实现较快的执行速度。
◆存储过程允许标准组件是编程。
◆存储过程能过减少网络流量。
◆存储过程可被作为一种安全机制来充分利用。
4、查看存储函数状态方法:
●通过show status语句
●如果要查看存储过程或函数的详细信息,要使用show create语句
5、游标是一个被SELECT语句检索出来的结果集。在存储了游标后,应用程序或用户就可以根据需要滚动或浏览其中的数据。
6、游标(cursor)具有以下特性:
●只读的,不能更新的
●不滚动的
●不敏感的,不敏感意为服务器可以活不可以复制它的结果表
(1)游标的声明:语法格式:declare cursorname cursor for select _ statement (2)打开游标:Open cursor_ name
(3)读取游标:fetch cursor_name into var_ name [,var_name] …(4) 关闭游标:close cursorname
7、CREATE PROCEDURE sp_update email(IN USer_name VARCHAR(50),IN e_mail VARCHAR(50))
UPDATE content SET email=e_mail WHERE username=user_name;
8、A 9 D 10 D 11 B
12
(1) create proceduce p1()
select dno,count(*) from emp group by dno;
(2) create proceduce p2(in gy char(10))
select * from emp where dno=gy;
(3) create proceduce p3()
select count(*) as 人数from emp where sex=’女’;
(4) create proceduce p4(in gy char(10))
select avg(empage) from emp where dno=gy;
call p4(‘11’);
(5) create proceduce p5(in age1 int, in age2 int)
select count(*),sum(empage) from emp where empage between age2 and age2;
(6) call p5(20,40);
drop proceduce p5;
(7) Create function name(no char(10))
Returns char(10)
Begin
Return(select empname from emp where empno=no);
End
(8) create function emp_age_count (iage1 int, age2 int)
Returns int
Begin
Return(select count(*) from emp where empage between age2 and age2); End
(9) drop function emp_age_count;