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

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

描述:

用文件创建组表。

语法:

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

备注:

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

参数:

f

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

C

组表的列。

x

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

b

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

选项:

@u

不压缩,缺省将压缩。

@r

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

@y

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

@p

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

@v

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

@t

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

@d

用于复组表,键字段后的第一个字段认为是删除标识字段,删除标识字段的值为Boolean类型,取值为true表示该记录已经被删除,读取复组表时可以根据删除标识字段的值判断记录是否已经被删除。

返回值:

组表/文件组

示例:

 

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' order by SALARY")

 

4

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

 

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(false: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,,]).cursor()

返回游标,内容如下:

8

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

 

9

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

增加分表,用来删除主键为1的记录。

10

=A9.append@i(A7)

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

11

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

 

12

=A11.open()

打开复组表。

13

=A12.cursor@w()

将复组表返回成游标,使用@w选项,处理删除标记,即Defiled字段值为true的记录当做被删除掉的记录,不被读出。

14

=A13.fetch()

查看A13游标中的数据:

可以看到复组表中EID1的记录没有被读出。