ODAC应用技巧(四)使用VARRAY数据类型

在使用对象时建议使用数组。但在你需要在数据集中使用大数组时可能会出现一些问题。比如,当为 ODAC 的一个字段创建大量数组时,也会创建大量的 TField 字段,这会导致程序的性能大大降低。 因此,ODAC 限制仅能为字段创建 1000 个成员。但不管怎样,你都可以使用 TOraArray 对象来存取所有的成员。当然,你也可以通过其它方法来实现。比如,设置 TOraQuery.SparseArray 为 True 并且通过 TArrayField 对象来存取数组成员。

如果创建了下面的类型:

CREATE TYPE TODACArray1 AS VARRAY (5) OF NUMBER;

CREATE TYPE TODACArray2 AS VARRAY (4) OF CHAR(10);

CREATE TABLE ODAC_Array (
Code NUMBER,
Title VARCHAR2(10),
Arr1 TODACArray1,
Arr2 TODACArray2,
);

要存取数组成员,你需要调用方法 FieldByName 。例如:

Value := Query.FieldByName(''''Arr1[0]'''').AsInteger;

If ObjectField property is True this code is right

Value := TArrayField(Query.FieldByName(''''Arr1'''')).Fields[0].AsInteger;

Using TOraDataSet.GetArray you can access to array items through TOraArray object

Value:= Query.GetArray(''''Arr1'''').ItemAsInteger[0];

你能够在 SQL 以及 PL/SQL 语句使用使用 VARRAY 类型作为参数。你需要指定 dtArray 到 TOraParam.DataType 并且使用 TOraParam.AsArray 属性来存取数组成员。

例如:

var
OraSQL: TOraSQL;
. . .
OraSQL.SQL.Text := ''''INSERT INTO ODAC_Array (Code, Arr1, Arr2)''''
''''VALUES (:Code, :Arr1, :Arr2)'''';

OraSQL.ParamByName(''''Code'''').AsInteger := 10;

with OraSQL.ParamByName(''''Arr1'''').AsArray do begin
AllocObject(OraSession.OCISvcCtx, ''''TODACArray1'''');
ItemAsInteger[0] := 12;
AttrAsInteger[''''[1]''''] := 10;
ItemAsInteger[3] := 133;
end;

with OraSQL. ParamByName(''''Arr2'''').AsArray do begin
OCISvcCtx:= OraSession.OCISvcCtx;
AllocObject(''''TODACArray2'''');
AttrAsString[''''[2]'''']:= ''''eeee'''';
ItemAsString[0]:= ''''FFFFF'''';
end;

OraSQL.Execute;

时间: 2024-10-30 19:04:25

ODAC应用技巧(四)使用VARRAY数据类型的相关文章

走近VB.Net(四) 关于数据类型与示例

示例|数据|数据类型 走近VB.Net(四) 关于数据类型与示例 在前面几章谈得最多的是Variant(vb6)到Object(vb.net)的转换,Object被称为通用的数据类型.另外是32位的long(vb6)被integer(vb.net)所取代,在vb.net中long储存64位的带符号整数.而short存储16位的数字取代vb6的integer的位置.而我们在下面要谈的是Decimal数据类型. 在初学vb6的时候,可能所有的人都做过同一个入门程序"计算器",你可能看到在计

【Silverlight】 Bing Maps开发应用与技巧四:自定义MapMode实现地图访问限制

在某些情况下可能会出现只需要访问(加载)某块区域的地图显示,也可能需要对地图的缩放级别进行限制,或者只能让地图在5--10级之间进行深度缩放.要实现这些功能就需要通过自定义MapMode来实现了.本篇将为您介绍如何通过自定义MapMode来实现地图访问限制的常用方法与技巧. 首先需要了解下Bing Maps Silverlight Control的地图投影模式(MapMode)的架构模型,所有的地图投影模式都是根据投影抽象基类(MapMode)扩展而来.比如二维平面地图投影模式(FlatMapM

DB2编程序技巧 (四)_DB2

正在看的db2教程是:DB2编程序技巧 (四).1.10 预防字段空值的处理 SELECT DEPTNO ,DEPTNAME ,COALESCE(MGRNO ,'ABSENT'),ADMRDEPT FROM DEPARTMENT    COALESCE函数返回()中表达式列表中第一个不为空的表达式,可以带多个表达式.    和oracle的isnull类似,但isnull好象只能两个表达式. 1.11 取得处理的记录数 declare v_count int; update tb_test se

ODAC应用技巧(二)使用BLOB及CLOB数据类型

ODAC 组件支持 Oracle 8 的 BLOB 和 CLOB 数据类型.你可以使用 TOraQuery 组件来获取 LOB 字段的值,使用同样的方法,你也可以获取 LONG 或 LONG ROW 字段.当你需要使用 SQL DML 及 PL/SQL 语句存取这些字段时,你就会发现 LOB 数据类型的用法有明显的不同. BLOB 和 CLOB 数据类型通过 LOB 定位器(指定数据地址) 存储在表列中:实际的 BLOB 和 CLOB 数据存储在独立的表空间中.与之不同的是,LONG 或 LON

四种整数数据类型的性能对比

数据|数据类型|性能 在我们写VBA程序的时候,我们经常要面对数据类型定义的选择,有的情况下,业务本身对于数据类型有要求和限制,那么我们并不难以选择,有些时候却没有限制,我们可以任意选用四种整数类型(Byte,Integer,Long,Currency)中的一种,例如: For i=1 to 100 在这行代码中,我们该把变量i定义为什么类型的变量呢?显然四种整数类型都可以正常运行,但是他们的效率是否相同呢?我们到底该如何选择?有的人说,当时是选最小的数据类型Byte,有的人说在32位系统上,3

《卸甲笔记》-PostgreSQL和Oracle的数据类型的对比系列四:大数据类型

PostgreSQL是世界上功能最强大的开源数据库,在国内得到了越来越多机构和开发者的青睐和应用.随着PostgreSQL的应用越来越广泛,Oracle向PostgreSQL数据库的数据迁移需求也越来越多.数据库之间数据迁移的时候,首先遇到的,并且也是最重要的,就是数据类型之间的转换.下面根据自己的理解和测试,写了一些数据类型之间的差异以及迁移时的注意事项的文章,不足之处,尚请多多指教. 大数据类型 Oracle的大数据类型主要包括三类.分别是存储在数据库内部的类型,包括BLOB, CLOB,

与MSSQL对比学习MYSQL的心得(四)--BLOB数据类型_Mysql

MYSQL里的BLOB数据类型 BLOB是一个二进制大对象,用来存储可变数量的数据.BLOB类型分为4种:TinyBlob.Blob.MediumBlob.LongBlob, 这几个类型之间的唯一区别是在存储文件的最大大小上不同. MySQL的四种BLOB类型     类型 大小(单位:字节) TinyBlob                            最大 255Blob                                  最大 65KMediumBlob      

Access数据库开发技巧(四)

各子系统集成的技巧 1.选项组.开关按钮.组合框等控件的运用 在窗体上将这些控件巧妙地加以运用可以有机地将有关系统通过一个窗体来控制,这些控件选择值可以传递到查询.报表及宏中的条件中去,从而使得对查询.报表及宏的控制显得灵活方便. 2.选项卡控件的运用 在Access 97 版中新增加了"选项卡"控件,这更使Access可以在有限的窗体中集成更多的子系统.比如在"打印表格"窗体中就可集成"成绩表"."十分段统计表".单科每分段

ODAC应用技巧(三)主/明细表

两个表之间的主/明细表关系应用非常广泛.因此为数据库应用程序开发人员提供简单的方法来实现它是非常重要的.让我们看看如何实现这项功能. 假如我们在 "Department" 和 "Employee" 之间建立了主/明细表关系."Department" 表包含以下字段: DepNo, DepName 和 Location.DepNo 是一个数字型的主键,其它两个字段是字符串类型. "Employee" 表包含以下字段: EmpNo