本章介绍append()函数的多种用法。
描述:
将游标/序表中的记录追加写入实表中。
语法:
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的附表,附表的维是k1和k2,列为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.ctx、2.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 的数据:
|
描述:
将游标中的记录追加写入虚表中。
语法:
备注:
将游标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:
|