7存储过程和包答辩.ppt

  1. 1、本文档共74页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 在许多情况下,在第一次将包实例化的时候需要运行初始化代码。可以通过在包主体中,在所有对象的后面,添加初始化部分来使之进行初始化。初始化的语法是: Create or replace package body pk1 Is Begin initial-code; End; * 定义一个包,使其中包括下面 功能: 1 建立过程,当传入学号和选课门数,首先判断SC_Number表是否存在,若不存在则创建该表格(包括学号和选修门数两列),将传入值插入或修改到SC_Number表中(该生不存在则插入,若存在则修改其选课门数)(私有过程) 2 建立过程(重载),当用户输入学号(或姓名),课程号,成绩,将该信息插入到SC表格中,若该课程已经满额,则提示相关信息;若该生已经选择了该课程,则修改该课程的成绩为输入成绩;若该生或该课程不存在,则提示相关错误。插入成功后调用上一个过程将学生选课情况修改。 练习 * 定义一个包,使其中包括下面 功能: 3 建立过程,当用户输入学号,将该生对应的选课信息(SC),学生基本信息(Student),SC_Number中关于该生的信息全部删除,若该生不存在,则给出相关提示。 4 建立过程,实现删除SC_Number表格的功能。 练习 * 返回结果集的存储过程 返回值中包括一结果集,例如: Create or replace procedure p1(v_sno varchar, rc out sys_refcursor, nCnt out number) is Begin select count(*) into nCnt from sc where trim(sno)=v_sno; open rc for select * from sc where trim(sno)=v_sno; exception …… --捕获异常 End; * 返回结果集的存储过程 接收一结果集,例如: declare c1 sys_refcursor; rs sc%rowtype; nCnt number; v_sno varchar2(20); Begin v_sno:=‘001’; p1(v_sno,c1,nCnt); --接下页 * 返回结果集的存储过程 接收一结果集,例如: if nCnt=0 then return; end if; loop fetch c1 into rs; exit when c1%notfound; dbms_output.put_line(rpad(rs.sno,10,’ ’ ) ||rpad(rs.cno,10,’ ’)||rs.grade); end loop; End; * Oracle中的锁 在两个不同的会话(Session)中,同时更新一张表,Oracle会自动加行锁。比如: Update student set ssex=‘m’ where sno=‘001’; 当该事务没有结束时(没提交或回滚),其他会话就不能对001学生进行修改。 若我们希望加表锁,则使用以下语句: lock table student in share mode; --共享锁 lock table student in exclusive mode; --排他锁 Oracle的排他锁并不能阻止其他人读。它和共享锁最大的区别是,一张表可以加多个共享锁,但只能加一个排他锁。 * Oracle中的锁 若需要手动加行锁(排他锁),则可以使用Select … for update [wait n]语句实现,只有提交了事物才释放锁: Declare rc sys_refcursor; Begin open rc for select * from student where ssex=‘m’ for update; update student set sage=sage+1 where ssex=‘m’; commit; close rc; End; * Oracle中的锁——行锁和表锁的比较 表锁是粒度最大的锁,在Oracle中这种方法比较浪费资源。行锁是在数据块上标记的,开销很小。 如果编写了一个大批量的更新,它会影响给定表

文档评论(0)

***** + 关注
实名认证
内容提供者

我是自由职业者,从事文档的创作工作。

1亿VIP精品文档

相关文档