描述:
将实表/内表/复组表分段后返回指定段的游标。
语法:
T.cursor(x:C,…;wi,...;k:n)
备注:
把实表/内表/复组表的数据经过x计算和过滤表达式wi过滤后,分成n段,返回第k段的游标,C为结果字段名。从附表中查询的数据也可以包括主表中的字段。
T为复组表时,所有分表同步分段,结果按维度归并,即先将分表号为1的表分成n段,然后其余分表根据分表1同步分段,最终取各分表的第k段数据按维度归并后返回。
选项:
@m |
T.cursor@m(x:C…;w;n) 生成路数为n的多路游标。参数n省略时用系统缺省值n为整数, n<2时返回普通游标,n省略则用【工具】-【选项】中的【多路游标缺省路数】值。 |
@v |
生成纯序表列式游标,相较普通游标性能有所提升。 |
@x |
游标取完则自动关闭T。 |
@o |
T为复组表时不做归并,直接按顺序取,所有分表统一分段。 |
@w |
用于复组表。 按更新机制归并,分表间存在相同键值时,忽略分表号较小的分表中的记录。分段要以第1分表为准,后面有些分表可能非常小可先全读。 处理删除标记,有删除标记的记录不返回到游标中,删除标记记录的键值在复组表中是唯一时,该条记录也会被保留。 使用该选项时,强制读出键字段,如果表中有删除标识列,则也会被强制读出。 |
@z |
逆序取,此时不支持分段。 |
参数:
返回值:
单路游标/多路游标
示例:
|
A |
|
1 |
for 100 |
|
2 |
=to(10000).new(#:k1,rand():c1).sort@o(k1) |
返回序表:
|
3 |
=to(10000).new(#:k1,rand(10000):c2,rand()*1000:c3).sort@o(k1) |
返回序表:
|
4 |
=A2.cursor() |
返回游标。 |
5 |
=A3.cursor() |
返回游标。 |
6 |
=file("D:\\tb4.ctx") |
生成组表文件。 |
7 |
=A6.create(#k1,c1) |
为组表A6创建k1为键的基表。 |
8 |
=A7.append(A4) |
将A4游标中的数据追加到基表中。 |
9 |
=A7.attach(table4,c2,c3) |
在基表上创建,名为table4的附表。 |
10 |
=A9.append(A5) |
将A5游标中的数据追加到附表table4中。 |
11 |
=A9.cursor(;c2<1000;2:3) |
将附表中c2<1000的记录分为3段,返回第2段的所有列组成的游标。 |
12 |
=A11.fetch() |
获取游标中的数据:
|
13 |
=A7.cursor(;c1>0.99) |
从基表中取出c1>0.99的记录。 |
14 |
=A13.fetch() |
获取游标中的数据:
|
15 |
=A9.cursor(k1,c1:b,c3;c3>999) |
从附表table4中取出基表的字段k1、c1和附表的字段c3同时筛选c3大于999的数据,并且将c1的字段名改为b。 |
16 |
=A15.fetch() |
获取游标中的数据:
|
17 |
=A9.cursor@m(;;3) |
用@m选项将附表table4生成多路游标。 |
|
A |
|
1 |
=file("employee1.ctx") |
生成组表文件employee1.ctx。 |
2 |
=A1.create@y(#EID,NAME,GENDER,SALARY) |
创建组表employee1.ctx的基表,EID、NAME、GENDER、SALARY为基表的列名,其中EID表示维。 |
3 |
=connect("demo").cursor("select EID,NAME,GENDER,SALARY from employee") |
返回游标。 |
4 |
=A2.append@i(A3) |
将A3游标中的记录追加到基表A2中。 |
5 |
=A2.cursor@vx(;SALARY>1000;) |
返回列式游标,游标取完自动关闭A2组表。
|
6 |
=A5.groups(GENDER;avg(SALARY):SALARY_AVG) |
对游标中的数据进行分组聚合运算:
|
7 |
=A2.cursor(;SALARY>2000) |
报错,提示“Stream Closed” |
T为复组表:
|
A |
|
1 |
=100000.new(~:ID,rand(2):FM).cursor() |
|
2 |
=file("nc.ctx":[1,2]) |
生成文件组。 |
3 |
=A2.create@y(#ID,FM;if(FM==1,1,2)) |
返回复组表。 |
4 |
=A3.append@x(A1) |
将A1游标中的数据追加到复组表中,此时复组表内容如下: 1.nc.ctx 2.nc.ctx
|
5 |
=A3.cursor(;;1:3) |
将复组表分成3段返回第1段,默认按照维归并,返回游标内容如下:
可以看到分表1和分表2的数据已经按维归并。 |
6 |
=A3.cursor@o(;;1:3) |
使用@o选项,复组表不做归并,直接按分段顺序取数,返回游标内容如下:
可以看到上半部分是分表1.nc.ctx中的内容,下半部分是分表2.nc.ctx中的内容。 |
多种过滤方式:
|
A |
|
1 |
=file("emp.ctx") |
|
2 |
=A1.open() |
打开组表文件。 |
3 |
=A2.import() |
省略参数,返回实表中的所有数据 :
|
4 |
=5.new(~:ID,~*~:Num).keys(ID) |
生成ID为键的序表:
|
5 |
=A2.cursor(EID,NAME;EID=A4.find(EID)) |
使用K=w过滤方式,w是Ti.find(K),实表中使EID=A4.find(EID)计算结果为null或false的记录过滤掉;EID为选出字段,赋值为序表A4的指引字段:
|
6 |
=A2.cursor(EID,NAME;EID=A4.pfind(EID)) |
使用K=w过滤方式,w是Ti.pfind(K),实表中使EID=A4.pfind(EID)计算结果为null或false的记录过滤掉;EID为选出字段,赋值为EID在序表A4中的序号:
|
7 |
=A2.cursor(EID,NAME;EID:A4) |
使用K:Ti过滤方式,用实表中EID的值与序表的键值作对比,匹配不上的将被过滤掉:
|
8 |
=A2.cursor(NAME,SALARY;EID:A4) |
K不被选出的情况,EID不是选出字段,仅过滤:
|
9 |
=A2.cursor(EID,NAME;EID:A4:null) |
使用K:Ti:null过滤方式,用实表中EID的值与序表的键值作对比,可以匹配上的将被过滤掉:
|
10 |
=A2.cursor(EID,NAME;EID:A4:#) |
使用K:Ti:#过滤方式,根据实表中EID的值去对比序表的记录序号,对应不上的记录将被过滤掉:
|
11 |
=connect("demo").query("select top 2 NAME,GENDER from employee").keys(NAME) |
返回序表,键为NAME:
|
12 |
=A2.cursor(EID,NAME;(EID=A4.find(EID),NAME=A11.find(NAME),EID!=null&&NAME!=null)) |
使用(K1=w1,…Ki=wi,w)过滤方式,返回符合所有条件的记录:
|
使用@z选项,逆序取:
|
A |
|
1 |
=100000.new(~:ID,rand(2):FM) |
|
2 |
=file("curz.ctx") |
|
3 |
=A2.create@y(#ID,FM) |
创建组表。 |
4 |
=A3.append@i(A1) |
|
5 |
=A4.cursor().fetch() |
将组表返回成游标,并读取游标中的数据:
|
6 |
=A4.cursor@z().fetch() |
使用@z选项逆序取,读取游标中的数据如下:
|
使用@w选项,按更新机制归并:
|
A |
|
1 |
=connect("demo").cursor("select EID,NAME,GENDER from employee") |
返回游标,内容如下:
|
2 |
=file("ec.ctx":[1,2]) |
文件组1.ec.ctx、2.ec.ctx。 |
3 |
=A2.create@y(#EID,NAME,GENDER;if(GENDER=="F",1,2)) |
创建复组表,EID为键,GENDER值为F的记录分到1.ec.ctx中,其余分到2.ec.ctx中。 |
4 |
=A3.append@ix(A1) |
将A1游标中的数据追加到复组表中。 |
5 |
=create(EID,NAME,GENDER).record([1,"AAA","M"]).cursor() |
返回游标,内容如下:
|
6 |
=file("ec.ctx":[3]) |
|
7 |
=A6.create@y(#EID,NAME,GENDER;3) |
增加分表3.ec.ctx。 |
8 |
=A7.append@i(A5) |
将A5游标中的内容追加到分表3.ec.ctx中,此时分表1.ec.ctx、3.ec.ctx中都存在主键为[1]的记录。 |
9 |
=file("ec.ctx":[1,2,3]).open() |
打开复组表ec.ctx。 |
10 |
=A9.cursor(;;1:3) |
将复组表分段后取出第1段,返回游标,游标内容如下:
|
11 |
使用@w选项,按照更新机制归并,返回游标内容如下:
|
使用@w选项,识别删除标识:
|
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("ecd.ctx":[1,2]) |
文件组1.ecd.ctx、2.ecd.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) |
将A3游标中的数据追加到复组表中。 |
7 |
=create(EID,Defiled,NAME,GENDER).record([2,true,,,0,true,,]).cursor() |
返回游标,内容如下:
|
8 |
=file("ecd.ctx":[3]) |
|
9 |
=A8.create@yd(#EID,Defiled,NAME,GENDER;3) |
增加分表3.ecd.ctx,Defiled为删除标识字段。 |
10 |
=A9.append@i(A7) |
将A1游标中的记录追加到分表3.ecd.ctx中,此时主键为2的记录中删除标识字段值为true,增加的主键值为0记录是原先分表中没有的,即带删除标识的键值唯一的记录。 |
11 |
=file("ecd.ctx":[1,2,3]).open() |
打开ecd.ctx复组表文件。 |
12 |
=A11.cursor().fetch() |
将复组表ecd.ctx中的所有数据返回到游标中,数据内容如下:
|
13 |
=A11.cursor@w().fetch() |
使用@w选项,将复组表ecd.ctx返回成游标,识别删除标识,即主键为2的记录不返回到游标中,带删除标识的键值唯一的记录会被保留下来,即主键为0的记录会返回到游标中,数据内容如下:
|