- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 下面的例子显示了包EmployeePackage的包体: CREATE OR REPLACE PACKAGE BODY EmployeePackage AS --游标定义 CURSOR order_sal RETURN EmpRecType IS SELECT empno,sal FROM emp ORDER BY sal; --招聘雇员子程序代码 PROCEDURE HireEmployee(p_EmpNo emp.empno%TYPE, p_EName emp.ename%TYPE, p_Job emp.job%TYPE, p_Mgr emp.mgr%TYPE, p_HireDate emp.hiredate%TYPE, p_Sal emp.sal%TYPE, p_Comm m%TYPE, p_DeptNo emp.deptno%TYPE) IS BEGIN INSERT INTO emp(empno,ename,job,mgr, Hiredate,sal,comm,deptno) VALUES (p_EmpNo,p_EName,p_Job,p_Mgr, p_HireDate,p_Sal,p_Comm,p_DeptNo); END HireEmployee; --解雇雇员子程序代码 PROCEDURE FireEmployee(p_EmpNo emp.empno%TYPE) IS BEGIN DELETE FROM emp WHERE empno=p_EmpNo; -- Check to see if the DELETE operation was successful. If -- it didnt match any rows, raise an error. IF SQL%NOTFOUND THEN RAISE e_EmployeeNotHired; END IF; END FireEmployee; --统计某部门的员工人数子程序代码 FUNCTION count_emp(p_DeptNo emp.deptno%TYPE) RETURN INTEGER IS Num INTEGER; BEGIN SELECT COUNT(*) INTO num FROM emp WHERE deptno=p_DeptNo; RETURN num; END count_emp; --返回一个所有部门的PL/SQL表子程序代码 PROCEDURE DepartmentList(p_Depts OUT t_DepartmentNoTable, p_NumDepartments IN OUT BINARY_INTEGER) IS v_DepartmentNo dept.deptno%TYPE; CURSOR c_Departments IS SELECT deptno FROM dept; BEGIN /*p_NumDepartments will be the table index. It will start at 0, and be incremented each time through the fetch loop. At the end of the loop, it will have the number of rows fetched, and therefore the number of rows returned in p_Depts.*/ p_NumDepartments:=0; OPEN c_Departments; LOOP FETCH c_Departments INTO v_DepartmentNo; EXIT WHEN c_Departments%NOTFOUND; p_NumDepartments:=p_NumDepartments+1; p_Depts(p_NumDepartments):=v_DepartmentNo; END LOOP; END DepartmentList; END EmployeePackage; / * * 这意味着把包从硬盘中读入到存储器中,并运行被调用子程序的编译代码。 这时,系统为该包中定义的所有变量分配存储器单元。每个会话都有其封装变量的备份,以确保执行同一包内子程序的两个对话使用不同的存储单元 。 一般在包体中所有对象之后加入一个初始化段,其语法如下: CREATE OR REPLACE PACKAGE BODY package_name{IS | AS} ... BEGIN initialization_code; END [ package_name]; * * * 该语句块中声明的变量(v_EmpNo,v_EName,v_Job
您可能关注的文档
- 04宏观经济学课稿.ppt
- 2016届高考高考英语二轮复习精品:专题2第9课时时态与语态(大纲版贵州专用)教材.ppt
- 2016届高考高考英语二轮复习精品:专题2第11课时非谓语动词与with复合结构(大纲版贵州专用)教材.ppt
- 2016届高考高考英语二轮复习精品:专题2第16课时特殊句式(大纲版贵州专用)教材.ppt
- 2016届高考高三生物二轮复习概念图教材.doc
- 13坐井观天.范例.ppt
- 2016届高考化学大一轮复习第2节烃和卤代烃(选修5)教材.ppt
- 04急性肺损伤陈贤南课稿.ppt
- 13坐井观天赏析写字课范例.ppt
- 2016届高考化学二轮复习必考部分专题三常见无机物及其应用第1讲常见非金属元素单质及其重要化合物教材.ppt
原创力文档


文档评论(0)