append()

阅读(3111) 标签: append,

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

T.append( cs )

描述:

将游标/序表中的记录追加写入实表中。

语法:

T.append(cs)

备注:

将游标/序表cs中的记录追加写入实表T中。

T是复组表时,cs还可以为多路游标,cs的每一路将和T的分表一一对应。

当主表上已经存在附表时,为主表追加数据,要求数据必须对键有序且唯一,否则报错。

主表里存在的记录,附表里可以没有记录与之对应;附表里存在的记录,在主表里必须有记录对应,否则拒绝追加。

参数:

T

实表/复组表。

cs

游标/序表。

选项:

@i

立即写出;缺省积累足够数据后再写出,组表关闭时强行写出

@x

单路cs时可能对应T的多个分表,每次计算分表表达式。

@m

归并追加写出,缺省追加到最后一条记录后面;暂不支持有附表的情况。

@y

cs读出后拼成内存分表,不写入外存;与其他选项互斥。

T是单组表则返回组表与内存分表组成的复组表。

返回值:

示例:

T为实表:

 

A

 

1

=create(k1,v1).record([1,10,2,20,3,30,4,40,10,100])

创建序表:

2

=create(k1,k2,v2).record([1,1,"a",3,1,"c"])

创建序表:

3

=create(k1,v3).record([1,"red",1,"blue",2,"red",2,

"yellow",2,"red",2,"red",4,"black",4,"red",4,"red",

4,"red",4,"red",4,"red",10,"red"])

创建序表:

4

=file("D:/ctb.ctx")

 

5

=A4.create(#k1,v1)

创建组表基表,其中k1作为维,v1为基表的列。

6

=A5.attach(table2,#k2,v2)

A2返回的基表上增加名为table2的附表,附表的维是k1k2,列为v2

7

=A5.attach(table3,v3)

A2返回的基表上增加名为table3的附表,附表的维是k1,列为v3

8

=A5.append(A1.cursor())

在基表中添加游标记录。

9

=A6.append(A2.cursor())

在附表table2中添加游标记录。

10

=A7.append(A3.cursor())

在附表table3中添加游标记录。

11

=A5.cursor().fetch()

返回基表中的数据:

12

=A6.cursor().fetch()

返回附表table2中的数据:

13

=A7.cursor().fetch()

返回附表table3中的数据:

T是复表:

 

A

 

1

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

 

2

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

 

3

=[A1,A2].mcursor()

返回多路游标。

4

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

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

5

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

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

6

=A5.append@i(A3)

将多路游标A3中的数据追加到复组表A5中,A3的每一路与A5的分表一一对应,使用@i选项将数据立即写出到复组表中。

单路游标追加写入复组表:

 

A

 

1

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

返回单路由表。

2

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

生成文件组。

3

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

返回复组表

4

=A3.append@x(A1)

使用@x选项,将单路游标追加到复组表中,每次计算分表表达式。

5

=A3.close()

关闭组表。

归并追加:

 

A

 

1

=demo.query("select EID,NAME from employee where EID>495")

返回序表:

2

=file("apm.ctx")

 

3

=A2.create@y(#EID,NAME)

创建组表。

4

=A3.append(A1)

A1序表中的内容追加到组表中。

5

=create(EID,NAME).record([5,"Ashley"])

返回序表:

6

=A3.append@m(A5)

A5序表中的内容追加到组表中,使用@m选项,归并追加写出。

7

=A6.import()

读取组表内容:

8

>A3.close()

关闭组表。

写入内存:

 

A

 

1

=demo.query("select EID,NAME from employee where EID>495")

返回序表:

2

=file("apm.ctx")

 

3

=A2.create@y(#EID,NAME)

创建组表。

4

=A3.append(A1)

A1序表中的内容追加到组表中。

5

=create(EID,NAME).record([5,"Ashley"])

返回序表:

6

=A3.append@y(A5)

A5序表中的内容追加到组表中,使用@y选项,读出A5的数据拼成内存分表,并写入内存,结果返回组表与内存分表组成的复组表。

7

=A6.import()

此时查看A6表数据,可以看到追加进去的A5的数据:

8

>A3.close()

关闭组表。

9

=A2.open().import()

由于A6中使用@y选项,追加的内容不写入外存,所以此时读取组表内容时不会包含A5 的数据:

 

T.append( cs )

描述:

将游标中的记录追加写入虚表中。

语法:

T.append(cs)

备注:

将游标cs中的记录追加写入虚表T中。

参数:

T

虚表。

cs

游标。

选项:

@i

立即写出;缺省积累足够数据后再写出,程序退出/有读取时将立即写出。

@x

cs为单路游标时,可能对应虚表T的多个分区,需要每次计算分区表达式。

@y

保持在内存,不写入外存。

返回值:

示例:

虚表中追加记录:

 

A

 

1

=create(file).record(["D:/file/Employee2.ctx"])

 

2

=pseudo(A1)

生成虚表对象。

3

=create(Dept,AvgSalary).record(["CSD",6400.53])

 

创建序表:

4

=A2.append@i(A3.cursor())

在虚表中添加游标记录。

单路游标追加写入虚表:

 

A

 

1

=file("append/apps.ctx":[1,2]).create@yi(#eid, deptid;(deptid%2)+1)

 

2

=to(1,10000).new(~:eid,rand(5)+1:deptid)

创建序表:

3

=pseudo(create(file,zone).record(["append/apps.ctx",[1,2]]))

生成虚表对象。

4

=A3.append@ix(A2.cursor())

使用@x选项,将单路游标追加到虚表中,每次计算分表表达式。

使用@y选项,将追加的记录保持在内存:

 

A

 

1

=create(file).record(["em.ctx"])

返回虚表定义记录。

2

=pseudo(A1)

生成虚表定义对象。

3

=A2.import()

读取虚表数据:

4

=create(EID,NAME).record([0,"AAAA"])

返回序表:

5

=A2.append@y(A4.cursor())

A4序表中的记录追加到虚表中,使用@y选项,读出A4的数据拼成内存分表,并写入内存。

6

=A2.import()

获取虚表数据,可以看到A5中追加的记录:

7

>A2.close()

关闭虚表。

8

=pseudo(A1).import()

读取虚表数据,A5中使用@y选项,追加的内容不写入外存,所以此时读取虚表内容时不会包含A4 的数据,结果同A3: