oracle t_varray,ODAC使用技巧:使用VARRAY数据类型

21428521970b596d3f8484d5e5339c84.png

在使用对象时建议使用数组。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;

2829f2ca24f0d0090cbba57f30759f23.png

ODAC使用技巧:使用VARRAY数据类型.doc

下载Word文档到电脑,方便收藏和打印[全文共967字]

编辑推荐:

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

下载Word文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值