icursor()

阅读(2900) 标签: 索引, 附表, 集群表,

本章介绍icursor()函数的多种用法。

T.icursor( C,…;w;f,… )

描述:

通过索引文件查询实表/内表数据。

语法:

T.icursor(C,…;w;f,…)

备注:

用索引文件f查询实表/内表T的数据,w过滤条件,C,…为查询字段名。

hash索引时,只能等值查询,且查询条件w中的字段要与索引字段一致。

全文索引时,w只能对String类型的字段过滤,支持like("*X*")式查询。

参数:

T

实表/内表。

C

表中的列名,缺省时读取全部列。

w

过滤条件,语法支持>>=<<===contain,过滤条件中用到的T表字段必须是索引字段。参数w不可省略。

f

索引文件对象,多个f时程序会自动使用合适的索引文件。T为内表时,f为内表索引名称。

选项:

@s

返回结果集对索引字段有序,支持大结果集。

@u

从左到右处理多&&条件,缺省会根据条件优化过滤次序。

返回值:

单路游标

示例:

使用排序索引文件:

 

A

 

1

=demo.query("select EID,NAME,BIRTHDAY,DEPT,GENDER,HIREDATE,SALARY from employee ")

返回序表。

2

=file("empi.ctx")

 

3

=A2.create@y(#EID,NAME,BIRTHDAY,DEPT,GENDER,HIREDATE,SALARY)

创建组表。

4

=A3.append@i(A1)

A1序表中的数据追加到组表中。

5

=file("index_dzdpx")

索引文件对象。

6

=A3.index(A5,DEPT=="HR";EID;DEPT)

给组表A3 中满足条件DEPT=="HR"EIDDEPT字段数据创建排序索引文件index_dzdpx,索引字段为EID

7

=file("index_px")

索引文件对象。

8

=A3.index(A7;EID,NAME)

给组表A3创建索引文件index_px,索引字段为EIDNAME,参数F省略,可读取所有字段。

9

=A3.icursor@u(EID,NAME,DEPT,SALARY;EID<20&&EID>15;A7,A5)

通过索引文件查询组表中EID<20EIDNAMEDEPTSALARY字段的数据,由于A5索引文件中不包含字段NAMEDEPT,所以执行该表达式时自动使用了A7索引,使用@u选项,从左到右处理多&&条件

使用hash索引文件:

 

A

 

1

=file("empi.ctx").open()

打开组表文件。

2

=file("index_hs")

索引文件对象。

3

=A1.index(A2:10;DEPT,GENDER)

为组表empi.ctx创建长度为10hash索引文件,索引字段为DEPT,GENDER

4

=A1.icursor(NAME,DEPT,GENDER,SALARY;[["HR","M"]].contain(DEPT,GENDER);A2)

通过索引文件index_hs查询组表中DEPTHRGENDERMNAMEDEPTGENDERSALARY字段的数据,使用hash索引时,只能等值查询,并且过滤条件中的字段值要与索引字段一致,返回游标中的数据内容如下:

使用全文索引文件:

 

A

 

1

=file("empi.ctx").open()

打开组表文件。

2

=file("index_qw")

索引文件对象。

3

=A1.index@w(A2;NAME)

使用@w选项,为组表empi.ctx创建全文索引文件,索引字段为NAME

4

=A1.icursor (EID,NAME,GENDER,BIRTHDAY;like(NAME,"A*");A2)

通过索引文件index_qw查询组表中NAME值为A开头的EIDNAMEGENDERBIRTHDAY字段的数据,。返回游标中的数据内容如下:

使用@s选项,返回结果集对索引字段有序:

 

A

 

1

=file("empi.ctx").open()

打开组表文件。

2

=file("index_px")

索引文件对象。

3

=A1.index(A2;DEPT)

创建索引文件,索引字段为DEPT

4

=A1.icursor(;DEPT=="HR"||DEPT=="R&D";A2).fetch()

根据索引文件查询组表数据,C参数省略返回所有列:

5

=A1.icursor@s(;DEPT=="HR"||DEPT=="R&D";A2).fetch()

使用@s选项,返回结果集对索引字段有序:

使用内表索引:

 

A

 

1

=demo.cursor("select * from SCORES ")

 

2

=file("SCORES_ClassTwo.ctx")

 

3

=A2.create@y(#CLASS,#STUDENTID,SUBJECT,SCORE)

创建组表。

4

=A3.append@i(A1)

A1游标中的数据追加到组表中。

5

=A4.memory()

用实表生成内表。

6

=A5.index(index1:10,CLASS =="Class one";SCORE)

为内表建立非主键索引,索引名称为index1

7

=A5.icursor(;;index1)

通过内表索引名称查询内表数据。