下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、使用OLE DB和ADO调用返回记录集的Oracle存储过程 摘要 OLE DB是建立在ODBC成功基础上的一种开放规范,它为访问和操纵不同类型数据提供开放的标准。ADO是OLD DB的一个消费者,它提供了对OLE DB数据源应用级的访问功能。在应用程序中使用OLE DB和ADO,可以高效地调用返回记录集的Oracle存储过程。关键字 OLE DB ADO 存储过程 记录集1
2、60; 前言 在基于Oracle数据库的ADO应用程序的开发过程中,为了提高执行速度和降低网络流量,往往要在应用程序中调用Oracle数据库服务器端的存储过程。有的存储过程需要返回多行的记录集。这种情况下,在应用程序中调用返回记录集的存储过程存在一定的难度。本文介绍如何使用OLE DB和ADO调用返回记录集的Oracle存储过程。2 OLE DB和ADO的关系2.1 OLE DB简介OLE DB建立在ODBC成功基础上的开放的规范,它为访问和操纵不同类型数据提供开放的标准。OLE DB定义了一个COM接口集合,它封装了各种数据库管理系统服务。这些
3、接口允许创建实现这些服务的软件组件。OLE DB组件包括数据提供者(存储和发布数据)、数据消费者(使用数据)和服务组件(处理和传输数据)。OLE DB的设计是以消费者和提供者概念为中心。OLE DB消费者表示传统的客户方,提供者将数据以表格形式传递给消费者。OLE DB的Oracle提供者(OraOLEDB)可使OLE DB消费者高效地访问Oracle数据源。图1给出OLE DB的系统图示。OLE DB数据提供者将数据从数据源传递给消费者。在标准接口的基础上,OLE DB消费者能够访问来自提供者的数据。因为有COM组件,消费者可以用任何支持COM的编程语言访问数据。2.2
4、; ADO对象模在ADO对象模型中,Connection、Command和Recordset对象是三个主要的对象。Connection对象表示对远程数据的连接。Connection对象可与Command对象或Recordset对象关联。Command对象定义了对数据源执行的指定命令。Command对象可以用来执行命令和参数化的SQL语句,可以用于SQL语句和返回记录集的SQL查询。Command对象既可以使用一个活动的Connection对象,也可以创建它自己到目标数据源的连接。Command对象包含一个Parameters集合,在该集合中每一个Parameter对象表示Command对象使用
5、的参数。Command对象执行参数化的SQL语句时,每一个Parameter对象表示SQL语句中的一个参数。Recordset对象表示的来自基本表或命令执行结果的记录全集。Recordset对象既可以使用一个活动的Connection对象,也可以创建它自己到目标数据源的连接。Recordset对象允许查询和修改数据。每一个Recordset包含一个Field对象集合,其中,每个Field对象表示Recordset中一个数据列。2.3 ADO和OLE DB的关系OLE DB是系统级编程接口,ADO是应用软件级编程接口。ADO是OLE DB的一个消费者,它提供了对OLE D
6、B数据源应用级的访问功能。ADO为OLE DB提供了一个易于使用的应用级接口。ADO允许用户编写通过OLE DB提供者对数据库服务器中的数据进行访问和操作的应用程序。其主要的优点是易于使用、高速度、低内存和占用较少的磁盘空间。ADO和OLE DB的关系如图2所示:3 Oracle中返回记录集的存储过程的定义 在Oracle存储过程中,通过定义类型为REF CURSOR(游标指针)的传出参数,可以返回记录集。OLE DB允许消费者执行带REF CURSOR类型参数的PL/SQL存储过程,或者执行返回REF CURSOR的存储函数。返回记录集的存储过程或函数必须
7、定义在程序包里。包是Oracle数据库的一种对象,它可以将数据类型、存储过程、函数、变量和常量封装在一起。包在结构上分为包头和包体两部分,这两部分要分别建立。包头用来定义可被外部引用的元素;包体定义实际代码。使用程序包定义返回记录集的存储过程时,需要在包头中预定义自己的REF CURSOR类型。在程序包体中,存储过程或函数须使用预定义的游标类型。另外,在一个存储过程或函数中,可以定义多个REF CURSOR类型的参数以返回多个记录集。以下以职工表emp为例,介绍如何定义返回记录集的Oracle存储过程,emp表的定义CREATE TABLE emp(empno NUMB
8、ER(4) NOT NULL, -职工编号ename VARCHAR2(10), -职工姓名hiredate DATE, -雇佣日期sal NUMBER(7,2), -工资deptno NUMBER(2); -所属部门编号下面给出返回记录集的Oracle存储过程和存储函数的示例程序包头和包体,其中存储过程GetEmpRec
9、ords含有两个REF CURSOR类型的传出参数,返回两个记录集,存储函数GetDept的返回值类型为REF CURSOR,返回一个记录集。 -定义一个名为Employees的程序包头CREATE OR REPLACE PACKAGE Employees AS TYPE empcur IS REF CURSOR; -empcur为自定义REF CURSOR类型-声明一个存储过程GetEmpRecords PRO
10、CEDURE GetEmpRecords(p_cursor OUT empcur, q_cursor OUT empcur, indeptno IN NUMBER, p_errorcode OUT NUM
11、BER);-声明一个存储函数GetDept FUNCTION GetDept(inempno IN NUMBER, p_errorcode OUT NUMBER) RETURN empcur;END Employees; -程序包头定义结束 -定义E
12、mployees的程序包体-定义存储过程GetEmpRecordsCREATE OR REPLACE PACKAGE BODY Employees AS PROCEDURE GetEmpRecords(p_cursor OUT empcur, q_cursor OUT empcur, indeptno IN NUMBER, p_errorcode OUT NUMBER) IS BEGIN p_errorcode := 0;
13、160; - p_errorcode为错误编号-打开游标变量p_cursor,查询所属部门编号-为indeptno的所有职工的信息 OPEN p_cursor FOR SELECT * FROM emp WHERE deptno = indeptno ORDER BY empno; -打开游标变量q_cursor,查询所属部门编号-为indeptno的所有职工的编号信息 OPEN q_cursor FOR SELECT empno FRO
14、M emp WHERE deptno = indeptno ORDER BY empno; EXCEPTION -例外处理 WHEN OTHERS THEN p_errorcode:= SQLCODE; END GetEmpRecords; -存储过程GetEmpRecords定义结束-定义存储函数GetDept FUNCTION GetDept
15、(inempno IN NUMBER, p_errorcode OUT NUMBER) RETURN empcur IS p_cursor empcur; -返回值 BEGIN p_errorcode := 0; -查询职工编号为inempno的职工的所属部门编号 OPEN p_cursor FOR SELECT deptno FROM emp WHERE empno
16、= inempno; RETURN (p_cursor); EXCEPTION WHEN OTHERS THEN p_errorcode:= SQLCODE; END GetDept; END Employees; -程序包体定义结束4 利用ADO调用返回记录集的Oracle存储过程使用OLE DB和ADO调用返回记录集的Oracle存储过程,在定义ADO对象和设置参数时,需要特定的设置。 参考文献1(美)W
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年宣城郎溪县人民医院公开招聘劳务派遣人员2名笔试模拟试题及答案解析
- 2026中国安能科工管理技术岗位招聘考试备考题库及答案解析
- 2026汉中脑安康复医院见习岗位招聘考试备考试题及答案解析
- 2026贵州乌当区水务管理局公益性岗位招聘1人考试备考试题及答案解析
- 2026云南昆明市昆华实验中招聘10人考试参考题库及答案解析
- 2026天津市中天天杰招聘考试参考试题及答案解析
- 2026年1月南平武夷山职业学院人才招聘32人笔试参考题库及答案解析
- 2026年常州机电职业技术学院单招综合素质考试备考题库带答案解析
- 2026年赤大白铁路工务段招聘备考题库及参考答案详解1套
- 兰州大学口腔医院2026年招聘备考题库完整参考答案详解
- 2026年七台河职业学院单招综合素质考试备考试题带答案解析
- 内蒙古包头市昆都仑区2025-2026学年七年级上学期期末考试道德与法治试卷(含答案)
- 2025年广东省深圳市检察官逐级遴选笔试题目及答案
- 2026湖北随州市纪委监委机关专项招聘以钱养事工作人员3人考试参考试题及答案解析
- 2026特区建工集团校园招聘(公共基础知识)测试题附答案
- 齿轮泵的课件
- 医院感染控制的智能预警系统设计
- 2025版中国临床肿瘤学会(csco)胃癌诊疗指南
- 2025年苏州工业园区领军创业投资有限公司招聘备考题库及1套完整答案详解
- 2025网格员考试理论题目及答案
- 2026年记者(新闻基础知识)自测试题及答案
评论
0/150
提交评论