oracle存储过程函数和程序包课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《oracle存储过程函数和程序包课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 存储 过程 函数 程序包 课件
- 资源描述:
-
1、2023-1-31oracle存储过程函数和程序包oracle存储过程函数和存储过程函数和程序包程序包oracle存储过程函数和程序包回顾回顾l游标就是指向上下文区的句柄或指针。游标就是指向上下文区的句柄或指针。l游标有两种类型:显式游标、隐式游标。游标有两种类型:显式游标、隐式游标。l四个游标属性四个游标属性:SQLFOUND、SQLNOTFOUND、SQLROWCOUNT、SQLISOPENl显式游标的使用步骤显式游标的使用步骤:个:个l记录变量和记录变量和%ROWTYPE l带参数的游标带参数的游标l游标游标FOR循环(循环游标)循环(循环游标)l游标中的更新和删除游标中的更新和删除lR
2、EF游标游标oracle存储过程函数和程序包教学目标l掌握过程的用法掌握过程的用法l掌握函数的用法掌握函数的用法l理解过程与函数的相同点和不同点理解过程与函数的相同点和不同点l理解程序包的概念并能熟练应用理解程序包的概念并能熟练应用oracle存储过程函数和程序包工作任务 l用无参过程实现用无参过程实现“Hello World!”程序程序l用带输入参数的过程向表中插入记录用带输入参数的过程向表中插入记录l用带输出参数的过程查询表中的记录数用带输出参数的过程查询表中的记录数l使用带输入输出参数的过程查询记录是否存使用带输入输出参数的过程查询记录是否存在在l使用函数查询部门信息使用函数查询部门信息
3、l使用程序包封装过程和函数使用程序包封装过程和函数oracle存储过程函数和程序包相关实践知识相关实践知识l从开始菜单中打开从开始菜单中打开SQL*Plus工具,以工具,以SCOTT用户的身份登录到数据库用户的身份登录到数据库 oracle存储过程函数和程序包不带参数的过程不带参数的过程2-1l输入以下代码,创建一个最简单的过程输入以下代码,创建一个最简单的过程 l功能功能:显示显示”Hello World!”CREATE OR REPLACE PROCEDURE sp_helloWorld ASBEGINDBMS_OUTPUT.PUT_LINE(Hello World!);END sp_he
4、lloWorld;oracle存储过程函数和程序包不带参数的过程不带参数的过程2-2l执行过程执行过程l EXECUTE sp_helloWorld;l执行结果执行结果:l删除过程删除过程lDROP PROCEDURE sp_helloWorld;oracle存储过程函数和程序包带输入参数的过程带输入参数的过程3-1l实现的功能:向表实现的功能:向表dept中插入一条记录中插入一条记录l创建带输入参数的过程,代码为:创建带输入参数的过程,代码为:oracle存储过程函数和程序包带输入参数的过程带输入参数的过程3-2CREATE OR REPLACE PROCEDURE sp_dept_inse
5、rt(i_deptno NUMBER,i_dname VARCHAR2,i_loc VARCHAR2)ASBEGIN INSERT INTO dept VALUES(i_deptno,i_dname,i_loc);COMMIT;EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(添加失败添加失败!原因为原因为:|SQLERRM);ROLLBACK;END sp_dept_insert;oracle存储过程函数和程序包带输入参数的过程带输入参数的过程3-3l分别输入两组数据来执行过程分别输入两组数据来执行过程,结果如下:,结果如下:oracle存储过程
6、函数和程序包带输出参数的过程带输出参数的过程3-1l实现功能:通过输出参数实现功能:通过输出参数count来得到来得到dept表表中的记录数中的记录数l创建带输出参数的过程创建带输出参数的过程CREATE OR REPLACE PROCEDURE sp_getcount(o_count OUT NUMBER)ASBEGINSELECT COUNT(*)INTO o_count FROM dept;END sp_getcount;oracle存储过程函数和程序包带输出参数的过程带输出参数的过程3-2l编写一段匿名的编写一段匿名的PL/SQL块来执行过程块来执行过程 DECLAREcnt NUMB
7、ER;BEGINsp_getcount(cnt);DBMS_OUTPUT.PUT_LINE(dept表中的记录数为表中的记录数为:|cnt);END;oracle存储过程函数和程序包带输出参数的过程带输出参数的过程3-3l输出结果:输出结果:oracle存储过程函数和程序包带带IN OUT参数的过程参数的过程2-1l实现功能实现功能:查询某个部门名称在表查询某个部门名称在表dept中是否中是否已经存在已经存在 l创建带创建带IN OUT参数的过程,代码为:参数的过程,代码为:CREATE OR REPLACE PROCEDURE sp_dept_dname_exist(io_value IN
8、OUT VARCHAR2)IS l_count NUMBER;BEGIN SELECT COUNT(*)INTO l_count FROM dept WHERE dname=io_value;IF(l_count0)THEN io_value:=存在存在;ELSE io_value:=不存在不存在;END IF;END sp_dept_dname_exist;oracle存储过程函数和程序包带带IN OUT参数的过程参数的过程2-2l执行过程:执行过程:l输出结果:输出结果:l部门名称部门名称ACCOUNTING存在存在!DECLARE l_iotest varchar2(20):=ACCOU
9、NTING;BEGIN sp_dept_dname_exist(l_iotest);DBMS_OUTPUT.PUT_LINE(部门名称部门名称ACCOUNTING|l_iotest|!);END;oracle存储过程函数和程序包函数函数4-1l实现功能:实现功能:按部门编号查询出表按部门编号查询出表dept中的部门名称中的部门名称l创建一个函数,代码为:创建一个函数,代码为:oracle存储过程函数和程序包函数函数4-2lCREATE OR REPLACE FUNCTION f_dept_getname_bynol(i_deptno NUMBER)lRETURN VARCHAR2lASll_d
10、name VARCHAR2(14);lBEGINl SELECT dname INTO l_dname FROM dept WHERE deptno=i_deptno;l RETURN l_dname;lEXCEPTIONl WHEN NO_DATA_FOUND THENl RETURN 错误错误!该编号的部门不存在该编号的部门不存在!;lEND f_dept_getname_byno;oracle存储过程函数和程序包函数函数4-3l函数的调用及其输出结果函数的调用及其输出结果:oracle存储过程函数和程序包函数函数4-4l删除函数删除函数 DROP FUNCTION f_dept_getn
11、ame_byno oracle存储过程函数和程序包过程与函数小结过程与函数小结2-1l共同点:两者共同点:两者的实质都是已命名的的实质都是已命名的PL/SQL程程序序块,即子程序,它们是子程序的两种类型,块,即子程序,它们是子程序的两种类型,存储在数据库中,可以从任何数据库客户端和存储在数据库中,可以从任何数据库客户端和前台应用程序中调用它们。前台应用程序中调用它们。oracle存储过程函数和程序包过程与函数小结过程与函数小结2-2l不同点:不同点:过程过程函数函数参数模式可以是IN、OUT或IN OUT参数模式只能是IN模式在语法规范中不包含RETURN子句在语法规范中必须包含RETURN子
12、句在可执行语句部分可以有RETURN语句,但其后不能加任何表达式在可执行语句部分至少应该包含一条RETURN expression语句可以用EXECUTE语句来执行不能用EXECUTE语句来执行oracle存储过程函数和程序包程序包程序包5-1l利用程序包封装过程利用程序包封装过程sp_dept_insert和函数和函数f_dept_getname_bynol程序包规范部分的代码:程序包规范部分的代码:CREATE OR REPLACE PACKAGE pkg_deptASPROCEDURE sp_dept_insert(i_deptno NUMBER,i_dname VARCHAR2,i_l
13、oc VARCHAR2);FUNCTION f_dept_getname_byno(i_deptno NUMBER)RETURN VARCHAR2;END pkg_dept;oracle存储过程函数和程序包程序包程序包5-2l程序包主体部分的代码程序包主体部分的代码 CREATE OR REPLACE PACKAGE BODY pkg_dept AS -过程sp_dept_insert PROCEDURE sp_dept_insert (i_deptno NUMBER,i_dname VARCHAR2,i_loc VARCHAR2)AS BEGIN INSERT INTO dept VALUE
14、S(i_deptno,i_dname,i_loc);COMMIT;EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(添加失败!原因为:|SQLERRM);ROLLBACK;END sp_dept_insert;oracle存储过程函数和程序包程序包程序包5-3 -函数f_num_range FUNCTION f_dept_getname_byno(i_deptno NUMBER)RETURN VARCHAR2 AS l_dname VARCHAR2(14);BEGIN SELECT dname INTO l_dname FROM dept WHER
展开阅读全文