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

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 nxyc_twz 的 blog

 

odac 使用技巧 (四)使用varray数据类型

nxyc_twz@163.com

   在使用对象时建议使用数组。但在你需要在数据集中使用大数组时可能会出现一些问题。比如,当为 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;

本文关键:ODAC VARRAY
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top