欢迎来到天天文库
浏览记录
ID:25855420
大小:72.50 KB
页数:11页
时间:2018-11-23
《使用ole db和ado调用返回记录集的oracle存储过程》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、使用OLEDB和ADO调用返回记录集的Oracle存储过程摘要OLEDB是建立在ODBC成功基础上的一种开放规范,它为访问和操纵不同类型数据提供开放的标准。ADO是OLDDB的一个消费者,它提供了对OLEDB数据源应用级的访问功能。在应用程序中使用OLEDB和ADO,可以高效地调用返回记录集的Oracle存储过程。关键字OLEDBADO存储过程记录集1前言在基于Oracle数据库的ADO应用程序的开发过程中,为了提高执行速度和降低网络流量,往往要在应用程序中调用Oracle数据库服务器端的存储过程。有的存储
2、过程需要返回多行的记录集。这种情况下,在应用程序中调用返回记录集的存储过程存在一定的难度。本文介绍如何使用OLEDB和ADO调用返回记录集的Oracle存储过程。2OLEDB和ADO的关系2.1OLEDB简介OLEDB建立在ODBC成功基础上的开放的规范,它为访问和操纵不同类型数据提供开放的标准。OLEDB定义了一个接口集合,它封装了各种数据库管理系统服务。这些接口允许创建实现这些服务的软件组件。OLEDB组件包括数据提供者(存储和发布数据)、数据消费者(使用数据)和服务组件(处理和传输数据)。OLEDB的
3、设计是以消费者和提供者概念为中心。OLEDB消费者表示传统的客户方,提供者将数据以表格形式传递给消费者。OLEDB的Oracle提供者(OraOLEDB)可使OLEDB消费者高效地访问Oracle数据源。图1给出OLEDB的系统图示。OLEDB数据提供者将数据从数据源传递给消费者。在标准接口的基础上,OLEDB消费者能够访问来自提供者的数据。因为有组件,消费者可以用任何支持的编程语言访问数据。2.2ADO对象模在ADO对象模型中,Connection、mand和Recordset对象是三个主要的对象。Con
4、nection对象表示对远程数据的连接。Connection对象可与mand对象或Recordset对象关联。mand对象定义了对数据源执行的指定命令。mand对象可以用来执行命令和参数化的SQL语句,可以用于SQL语句和返回记录集的SQL查询。mand对象既可以使用一个活动的Connection对象,也可以创建它自己到目标数据源的连接。mand对象包含一个Parameters集合,在该集合中每一个Parameter对象表示mand对象使用的参数。mand对象执行参数化的SQL语句时,每一个Paramete
5、r对象表示SQL语句中的一个参数。Recordset对象表示的来自基本表或命令执行结果的记录全集。Recordset对象既可以使用一个活动的Connection对象,也可以创建它自己到目标数据源的连接。Recordset对象允许查询和修改数据。每一个Recordset包含一个Field对象集合,其中,每个Field对象表示Recordset中一个数据列。2.3ADO和OLEDB的关系OLEDB是系统级编程接口,ADO是应用软件级编程接口。ADO是OLEDB的一个消费者,它提供了对OLEDB数据源应用级的访问
6、功能。ADO为OLEDB提供了一个易于使用的应用级接口。ADO允许用户编写通过OLEDB提供者对数据库服务器中的数据进行访问和操作的应用程序。其主要的优点是易于使用、高速度、低内存和占用较少的磁盘空间。ADO和OLEDB的关系如图2所示:3Oracle中返回记录集的存储过程的定义在Oracle存储过程中,通过定义类型为REFCURSOR(游标指针)的传出参数,可以返回记录集。OLEDB允许消费者执行带REFCURSOR类型参数的PL/SQL存储过程,或者执行返回REFCURSOR的存储函数。返回记录集的存储
7、过程或函数必须定义在程序包里。包是Oracle数据库的一种对象,它可以将数据类型、存储过程、函数、变量和常量封装在一起。包在结构上分为包头和包体两部分,这两部分要分别建立。包头用来定义可被外部引用的元素;包体定义实际代码。使用程序包定义返回记录集的存储过程时,需要在包头中预定义自己的REFCURSOR类型。在程序包体中,存储过程或函数须使用预定义的游标类型。另外,在一个存储过程或函数中,可以定义多个REFCURSOR类型的参数以返回多个记录集。以下以职工表emp为例,介绍如何定义返回记录集的Oracle存储
8、过程,emp表的定义如下:CREATETABLEemp(empnoNUMBER(4)NOTNULL,--职工编号enameVARCHAR2(10),--职工姓名hiredateDATE,--雇佣日期salNUMBER(7,2),--工资deptnoNUMBER(2));--所属部门编号下面给出返回记录集的Oracle存储过程和存储函数的示例程序包头和包体,其中存储过程GetEmpRecords含有两个REFCUR
此文档下载收益归作者所有