欢迎来到天天文库
浏览记录
ID:28825668
大小:34.50 KB
页数:6页
时间:2018-12-14
《第七章 存储过程和程序包.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、第七章存储过程和程序包回顾q游标用于处理查询结果集中的数据q游标类型有:隐式游标、显式游标和REF游标q隐式游标由PL/SQL自动定义、打开和关闭q显式游标用于处理返回多行的查询q显式游标可以删除和更新活动集中的行q要处理结果集中所有记录时,可使用循环游标q在声明REF游标时,不需要将SELECT语句与其关联目标q创建和使用存储过程q创建和使用函数q创建和使用程序包存储过程q在Oracle中的存储过程又名子程序q命名的PL/SQL块,编译并存储在数据库中子程序的各个部分1.声明部分2.执行部分3.异常部分(可选)优点1.模块化2.可重用3.可维护性4.安全性语法CR
2、EATEORREPLACEPROCEDURE存储过程名字【参数列表】AS
3、IS声明变量区域BEGIN执行部分;[异常部分]END;AS
4、IS代替DECLARE,过程中不允许出现DECLARE参数模式1.IN默认2.OUT将值交给调用的程序3.INOUT即可以赋值也可以把值调用出来select*fromuser_errors;显示编译时错误信息createorreplaceproceduremyProc(empno1varchar)isename1varchar2(40);beginselectenameintoename1fromscott.empwhereempn
5、o=empno1;dbms_output.put_line(ename1);end;注意参数里不要求精度调用过程EXECUTE过程名(‘参数’)在SQL*PLUS中才能使用或BEGIN过程名(‘参数’)END;有参数的时候必须带括号程序演示out安全性授权问题grantexecuteon存储过程to用户;被授权用户下execute拥有者.存储过程;存储过程是对表操作的,若该用户没有该表的权限,他可以执行这个存储过程吗?select语句不能在过程中使用课堂练习九九乘法表函数快速返回值使用了返回值,返回类型和参数类型不能指明数据类型的精度一般不使用输出参数,直接使用在表
6、达式中函数的创建createorreplacefunctiongetName(sNovarchar2)returnvarcharissssvarchar(20);beginselectenameintosssfromscott.empwhereempno=sno;returnsss;end;函数的执行declareaaavarchar(20);beginaaa:=getName('7369');dbms_output.put_line(aaa);end;函数在表达式中的使用selectgetName('7369')fromdual;select*fromscott.
7、empwhereename=getName('7369');函数与过程的比较过程函数作为PL/SQL语句执行作为表达式的一部分调用在规格说明中不包含RETURN子句必须在规格说明中包含RETURN子句不返回任何值必须返回单个值可以包含RETURN语句,但是与函数不同,它不能用于返回值必须包含至少一条RETURN语句自主事务处理createorreplaceprocedurep1asbegininsertintoscott.deptvalues(70,'ee','china');rollback;end;createorreplaceprocedurep2—主事务as
8、beginupdatescott.deptsetdname='ww';p1;--子事务end;beginp2;end;内容并没插入进去createorreplaceprocedurep1aspragmaautonomous_transaction;--自主事务begininsertintoscott.deptvalues(70,'ee','china');rollback;end;自主事务处理的特征q与主事务处理的状态无关q提交或回滚操作不影响主事务处理q自主事务处理的结果对其他事务是可见的q能够启动其他自主事务处理包函数,过程过多的时候就不便于管理,程序失去了可维
9、护性包包含多个子程序或多个变量包1.规格说明,起到声明作用2.主体部分,具体实现规格说明在没有主体部分可以单独存在createorreplacepackageempPackageisTypecurisrefcursorreturnscott.emp%rowtype;procedureSelectEmp(FoundNoscott.emp.empno%type);procedureSelectEmp;procedurereturnEmp(inoutEmpinoutcur);procedureinsertDept(myDeptscott.dept%rowtype);e
此文档下载收益归作者所有