第七章存储过程和程序包_第1页
第七章存储过程和程序包_第2页
第七章存储过程和程序包_第3页
第七章存储过程和程序包_第4页
第七章存储过程和程序包_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第七章存储过程和程序包回顾游标用于处理查询结果集中的数据游标类型有:隐式游标、显式游标和ref 游标隐式游标由pl/sql 自动定义、打开和关闭显式游标用于处理返回多行的查询显式游标可以删除和更新活动集中的行要处理结果集中所有记录时,可使用循环游标在声明ref 游标时,不需要将select 语句与其关联目标创建和使用存储过程创建和使用函数创建和使用程序包存储过程在 oracle 中的存储过程又名子程序命名的pl/sql 块,编译并存储在数据库中子程序的各个部分1.声明部分2.执行部分3.异常部分(可选)优点1.模块化2.可重用3.可维护性4.安全性语法create or replace pro

2、cedure 存储过程名字【参数列表】as|is 声明变量区域begin 执行部分;异常部分 end; as|is 代替 declare ,过程中不允许出现declare 参数模式1.in 默认2.out 将值交给调用的程序3.in out 即可以赋值也可以把值调用出来select * from user_errors; 显示编译时错误信息createorreplaceprocedure myproc(empno1 varchar) isename1 varchar2( 40 ); beginselectename intoename1 fromscott.emp whereempno = e

3、mpno1; dbms_output.put_line(ename1); end ;注意参数里不要求精度调用过程execute 过程名(参数) 在 sql*plus 中才能使用或begin 过程名(参数)end; 有参数的时候必须带括号程序演示out 安全性授权问题grantexecuteon存储过程to用户; 被授权用户下execute 拥有者 .存储过程;存储过程是对表操作的,若该用户没有该表的权限,他可以执行这个存储过程吗? select 语句不能在过程中使用课堂练习九九乘法表函数快速返回值使用了返回值,返回类型和参数类型不能指明数据类型的精度一般不使用输出参数,直接使用在表达式中函数的

4、创建createorreplacefunction getname (sno varchar2) returnvarcharissss varchar( 20 ); beginselect ename into sss from scott.emp where empno = sno; return sss; end ;函数的执行declare aaa varchar( 20 ); begin aaa:=getname(7369); dbms_output.put_line(aaa); end ; 函数在表达式中的使用select getname(7369) from dual; select

5、 * from scott.emp where ename = getname(7369);函数与过程的比较过 程函数作为pl/sql 语句执行作为表达式的一部分调用在规格说明中不包含return 子句必须在规格说明中包含return 子句不返回任何值必须返回单个值可以包含return 语句,但是与函数不同,它不能用于返回值必须包含至少一条return 语句自主事务处理createorreplaceprocedure p1 asbegininsertinto scott.dept values ( 70 , ee, china); rollback; end ; create or repla

6、ce procedure p2 主事务as begin update scott.dept set dname = ww; p1;-子事务end; begin p2; end; 内容并没插入进去createorreplaceprocedure p1 aspragmaautonomous_transaction; -自主事务begininsertinto scott.dept values ( 70 , ee, china); rollback; end ; 自主事务处理的特征与主事务处理的状态无关提交或回滚操作不影响主事务处理自主事务处理的结果对其他事务是可见的能够启动其他自主事务处理包函数,

7、过程过多的时候就不便于管理,程序失去了可维护性包 包含多个子程序或多个变量包1.规格说明,起到声明作用2.主体部分,具体实现规格说明在没有主体部分可以单独存在createorreplacepackage emppackage istype cur isrefcursorreturn scott.emp%rowtype; procedure selectemp (foundno scott.emp.empno%type ); procedure selectemp; procedure returnemp(inoutemp inout cur); procedure insertdept(myd

8、ept scott.dept%rowtype); end emppackage; 主体必须要有包的说明部分createorreplacepackagebody emppackage isprocedure selectemp (foundno scott.emp.empno%type ) ascursorempcur isselect * from scott.emp whereempno= foundno; beginfor i in empcur loop dbms_output.put_line(i.ename | |i.sal); endloop ; end selectemp; pr

9、ocedure selectemp ascursor empcur isselect * from scott.emp ; beginfor i in empcur loop dbms_output.put_line(i.ename | |i.sal); endloop ; end selectemp; procedure returnemp(inoutemp inout cur) asbeginopen inoutemp forselect * from scott.emp; end returnemp; procedure insertdept(mydept scott.dept%rowtype) asbegininsertintoscott.dept values(m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论