f.create( C ,…; x;b )

阅读(1733) 标签: 文件, 创建组表,

描述:

用文件创建组表。

语法:

f.create(C,…;x;b)

备注:

用组表文件f创建组表,C为组表的列,C前带#表示维,维及其前面的所有字段必须有序。当f是文件组时生成复组表,x是分表表达式。

参数:

f

组表文件对象/文件组对象。

C

组表的列。

x

分表表达式,计算结果为对应分表号的整数。

b

区块大小,单位为字节,缺省使用选项中设置的组表区块大小的值;第三方应用程序中集成使用时,缺省为raqsoftConfig.xml文件中配置的blockSize的值。

选项:

@u

不压缩,缺省将压缩。

@r

生成行存文件,缺省用列存,行存模式的组表不支持使用多路游标。

@y

文件已存在时强制重新创建,缺省中断计算。

@p

按第一个字段作为分段键。

@v

列存方式下,数据维护时对比列是否纯,并保存数据类型。

@t

维构成键,且最后一个键是时间键,此时不能再有附表;支持复组表。

@d

用于复组表,键字段后的第一个字段认定为更新标识字段,字段值有三种:null表示新增,true表示删除;false表示修改。

程序可以根据更新标识字段值读取复组表数据。

返回值:

组表/文件组

示例:

 

A

 

1

=file("employee1.ctx")

生成组表文件employee1.ctx

2

=A1.create(#EID,NAME,GENDER)

创建组表employee1.ctx的基表,EIDNAMEGENDER为基表的列名,其中EID表示维。

3

=connect("demo").cursor("select EID,NAME,GENDER,SALARY  from employee where GENDER='M' ").sortx(EID)

 

4

=connect("demo").cursor("select EID,NAME,GENDER,SALARY  from employee where GENDER='F'  ").sortx(EID)

 

5

=[A3,A4].mcursor()

返回多路游标。

6

=file("emp.ctx":[1,2])

生成文件组,包含的文件分别为1.emp.ctx2.emp.ctx

7

=A6.create@y(#EID,NAME,GENDER,SALARY;if(GENDER=="F",1,2))

创建复组表,if(GENDER=="F",1,2)为分表表达式,使用@y选项,文件已存在时强制重新创建。

8

=A7.append@i(A5)

将多路游标A5中的数据追加到复组表A7中,A5的每一路与A7的分表一一对应。

9

=file("1.emp.ctx").open().cursor().fetch()

查看分表1.emp.ctx中的数据。

10

=file("2.emp.ctx").open().cursor().fetch()

查看分表2.emp.ctx中的数据。

第一个字段作为分段键:

 

A

 

1

=file("CITES.ctx")

生成组表文件CITES.ctx

2

=A1.create@p(STATEID,#CID,NAME,POPULATION)

创建组表CITES.ctx的基表,使用@p选项将第一个字段STATEID作为分段键;选项缺省则将维字段CID作为缺省字段。

设置时间键:

 

A

 

1

=file("transaction.ctx")

 

2

=A1.create@yt(#UID,#Time,Change,Amount)

创建组表的基表,使用@t选项,UID为基本键,Time为时间键。

3

=file("transaction.txt").cursor@t().sortx(UID,Time)

返回对UID,Time字段有序的游标。

4

=A2.append@i(A3)

A3游标中的数据追加到基表中。

5

=A2.import()

获取基表中的数据:

使用更新标识字段:

 

A

 

1

=connect("demo").cursor("select  EID,NAME,GENDER  from employee") 

 

2

=A1.derive(null:Defiled)

 

3

=A2.new(EID,Defiled,NAME,GENDER)

返回游标,内容如下:

4

=file("ed.ctx":[1,2])

文件组1.ed.ctx2.ed.ctx

5

=A4.create@yd(#EID,Defiled,NAME,GENDER;if(GENDER=="F",1,2))

创建复组表,EID为键,使用@d选项,将Defiled作为更新标识字段,GENDER值为F的记录分到1.ed.ctx中,其余分到2.ed.ctx中。

6

=A5.append@ix(A3)

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

7

=create(EID,Defiled,NAME,GENDER).record([1,true,,2,false, "ABC","F"]).cursor()

返回游标,内容如下:

8

=file("ed.ctx":[3])

 

9

=A8.create@yd(#EID,Defiled,NAME,GENDER;3)

增加分表3.ed.ctx

10

=A9.append@i(A7)

A7游标中的数据追加到分表3.ed.ctx中。

11

=file("ed.ctx":[1,2,3])

 

12

=A11.open()

打开复组表。

13

=A12.cursor@w()

将复组表返回成游标,使用@w选项,处理更新标记,即:删除EID1的记录,修改EID2的记录。

14

=A13.fetch()

查看A13游标中的数据:

可以看到复组表中EID1的记录没有被读出,且EID 2的记录NAME值已更新。