本章介绍cursor()函数的多种用法。
描述:
调用网格文件,将执行程序后return的结果集生成游标返回
语法:
cursor(dfx,…)
备注:
调用网格文件,将执行程序后return的结果集生成游标返回。dfx中有多个return时,先合并多个return的结果集,再将合并后的结果集返回成游标,dfx中所有的return的结果集必须具有相同的数据结构,否则报错。
查找dfx时可以使用绝对路径,也可以使用相对路径,相对路径时的搜索顺序为类路径-寻址路径-主目录。
参数:
dfx |
网格文件名称 |
… |
dfx的参数 |
选项:
@c |
dfx可以是单元格,对应由func定义的子程序 |
返回值:
游标
示例:
主目录下test.dfx网格文件内容如下,arg1为网格参数:
|
A |
B |
|
1 |
for arg1 |
|
|
2 |
|
=connect("demo").query("select * from GYMNASTICSWOMEN where ID=?",A1) |
|
3 |
|
=B2.derive(avg(VAULT,UNEVENBARS,BALANCEBEAM,FLOOR):Average) |
|
4 |
|
return B3 |
循环计算并return结果集 |
|
A |
|
1 |
=[5,10,20,25] |
|
2 |
=cursor("test.dfx",A1) |
调用test.dfx,将A1中的序列作为参数arg1的值传递进去,结果返回游标。 |
3 |
=A2.fetch() |
从游标中获取记录,可以看到,结果为test.dfx中各次循环计算后return的结果集的并集。 |
4 |
=call("test.dfx",A1) |
对比使用call函数调用test.dfx,最终只返回第一次循环中return的结果集 |
|
A |
B |
|
1 |
func |
|
|
2 |
|
return A1.sum() |
|
3 |
=cursor@c(A1,[2,5,7]) |
|
调用以A1为主格的代码块 |
4 |
=A3.fetch() |
|
14 |
描述:
基于游标针对每个cursor定义管道。
语法:
cursor cs
cursor
…
cursor
备注:
基于cs针对每个cursor定义一个管道,然后遍历游标cs,在代码块中的cursor格值即为管道,计算后再将管道结果写入cursor所在格。
参数:
cs |
游标 |
… |
代码块 |
返回值:
管道结果集
示例:
|
A |
B |
|
1 |
=to(100000).new(rand(1000):f1,rand(1000):f2).cursor() |
|
产生游标 |
2 |
cursor A1 |
=A2.groups(f1:count(1)) |
遍历游标A1,A2为管道,在B2代码块中计算,将结果写cursor所在格A2中 |
3 |
cursor |
=A3.groups(f2:count(1)) |
同上 |
描述:
语法:
A.cursor(k:n)
备注:
用序列A生成游标,可将该游标分成n段,取第k段。
参数:
A |
序列 |
k |
分段号 |
n |
总段数。k和n都省略时表示取全集。 |
选项:
@m |
A. cursor@m(n),返回成多路游标,n表示路数,缺省使用设计器中设置的【多路游标缺省路数】值作为路数。 B. cursor@m(mcs,K:K’,...),将有序序列按有序多路游标mcs同步分段为多路游标,K:K’为分段键;与@p同时使用时,只按msc和A的第一字段对比分段,忽略K:K’
|
@p |
假定对第一字段有序,分段时不会将第一字段相同记录分到两段。使用@p选项时忽略参数k、n |
返回值:
示例:
|
A |
|
1 |
=demo.query("select * from SCORES") |
|
2 |
=A1.cursor(1:3) |
将A1中序表生成的游标分为3段,取第1段游标返回 |
3 |
=A1.cursor@m(3) |
返回多路游标 |
4 |
=demo.query("select * from STUDENTS").sort(ID) |
将A4生成的序表根据ID排序 |
5 |
=demo.query("select * from STUDENTS1").sort(ID).cursor@m() |
将A5生成的序表根据ID排序后返回成多路游标 |
6 |
=A4.cursor@m(A5,ID:ID) |
同步分段为多路游标,ID为分段键 |
描述:
根据sql创建数据库游标返回。
语法:
db. cursor(sql {,args …}) |
|
备注:
根据sql创建数据库游标返回,数据扫描完将自动关闭游标。
参数:
db |
数据库连接 |
sql |
需要查询的sql语句,如select * from table。 |
args |
sql中如果用到参数,就必须转入参数值,这里可以是直接写好的参数值,或者是查询定义的args。注意,各个参数之间用逗号分隔。 |
选项:
@i |
结果集只有1列时返回的游标内容为序列 |
@d |
将numeric型数据转换成double型数据而非decimal型数据 |
@x |
关闭游标时自动关闭数据库连接,只限用connect连接的 |
返回值:
游标
示例:
|
A |
B |
C |
|
1 |
=connect("demo") |
|
||
2 |
=A1.cursor("select * from SCORES") |
返回取数游标 |
||
3 |
=create(CLASS,STUDENTID,SUBJECT,SCORE) |
构造新序表 |
||
4 |
for |
|
|
|
5 |
|
if A4==1 |
=A2.skip(5) |
当循环序号为1时,连跳5行 |
6 |
|
=A2.fetch(3) |
从游标A2取数,每次取3条 |
|
7 |
|
if B6==null |
当B6为空时跳出循环 |
|
8 |
|
|
break |
|
9 |
|
else |
|
|
10 |
|
|
>A3.insert(0:B6,CLASS,STUDENTID,SUBJECT,SCORE) |
把B6记录插入到A3中 |
11 |
=A1.cursor@ix("select NAME from STUDENTS") |
添加@x选项,游标关闭时自动关闭数据库连接 |
||
12 |
=A11.fetch() |
游标内容为序列 |
||
13 |
=A1.cursor@i("select NAME from STUDENTS") |
报错:Data Source demo is shutdown or wrong setup.,提示数据源未启动,这是由于A11中的游标关闭时,自动关闭了数据库连接。 |
||
14 |
=mysql.cursor@d("select * from ta") |
|
||
15 |
=A14.fetch() |
|
||
16 |
=demo.cursor("select * from dept where deptid<? and father=?",arg1,arg2) |
arg1、arg2为网格参数,设置参数默认值分别为10、1 |
||
17 |
=A16.fetch() |
|
相关概念:
描述:
根据文件创建游标
语法:
f.cursor() |
f.cursor(Fi:type,…;k:n,s) |
备注:
根据文件f创建游标并返回,数据扫描完将自动关闭游标。
参数:
f |
文件对象,仅支持文本文件对象 |
Fi |
读出的字段,缺省读出所有,用#时表示用序号定位 |
type |
字段类型,包括:bool、int、long、float、decimal、string、date、time和datetime,缺省使用第一行数据类型。 |
s |
自选分隔符,缺省默认分隔符是tab。省略参数s时,s前边的逗号可以省略。 |
k |
分段号 |
n |
总段数。k和n都省略时表示读全文件。 |
选项:
@t |
f中第一行记录作为字段名,不使用本选项时默认使用_1,_2,…作为字段名 |
|
@b |
从export出的二进制文件中读,支持参数Fi、k和n,不支持参数type和s,忽略选项@t@s@i@q@m。记录数少的文件在分段读取时可能会有空段。 |
|
@e |
Fi在文件中不存在时将生成null,缺省将报错。 |
|
@x |
关闭时自动删除文件 |
|
@s |
不拆分字段,读成游标,游标内容为单字段串构成的序表,忽略参数 |
|
@i |
结果集只有1列时返回的游标内容为序列 |
|
@q |
如果字段串外有引号则先剥离,包括标题部分,并处理转义。 |
|
@c |
无s时用逗号分隔。如果同时有s则用s分隔。 |
|
@m |
f.cursor@m(Fi:type,…;n,s),返回成多路游标,n表示路数,缺省使用设计器中设置的【多路游标缺省路数】值作为路数。 |
|
@o |
用引号作为转义符 |
|
@k |
保留数据项两端的空白符,缺省将自动做trim |
|
@d |
行内有数据不匹配类型和格式时删除该行,此时会按type检查类型;@p@q时括号和引号不匹配时也删除该行 |
|
@n |
列数和第一行不匹配也作为错误处理,将被抛弃 |
|
@v |
@d@n检查出错时抛出违例,中断程序,输出出错行的内容 |
|
@w |
把每行读成序列,结果为序列的序列构成的游标,列名也算作一行 |
|
@a |
将单引号作为引号处理,缺省不处理,与@q组合使用时也是将单引号作为引号处理 |
|
@p |
解析时处理括号和引号匹配,括号内分隔符不算,同时引号外转义也处理 |
|
@f |
不做任何解析,简单用分隔符拆成串 |
|
@l |
允许续行,行尾是转义字符\ |
|
返回值:
游标
示例:
|
A |
B |
C |
|
|||||||||
1 |
=file("D://Student.txt").cursor@tx() |
返回取数游标,将第一行记录作为字段名,并且关闭游标时自动删除文件 |
|||||||||||
2 |
=create(CLASS,STUDENTID,SUBJECT,SCORE) |
构造新序表 |
|||||||||||
3 |
for |
|
|
||||||||||
4 |
|
if A3==1 |
=A1.skip(5) |
当循环序号为1时,连跳5行 |
|||||||||
5 |
|
=A1.fetch(3) |
从游标A1取数,每次取3条 |
||||||||||
6 |
|
if B5==null |
当B5为空时跳出循环 |
||||||||||
7 |
|
|
break |
|
|||||||||
8 |
|
else |
|
|
|||||||||
9 |
|
|
>A2.insert(0:B5, CLASS,STUDENTID,SUBJECT,SCORE) |
把B5记录插入到A2中 |
|||||||||
10 |
=file("D://Department.txt").cursor@t(Dept,Manager;,"/") |
=A10.fetch() |
Department.txt文件内容: Department.txt内容以斜杠分隔,按照指定字段Dept和Manager读出 |
||||||||||
11 |
=file("D://Department5.txt").cursor@t(;1:2) |
=A11.fetch() |
省略选出字段和分隔符,将游标分成2段,读取第1段的数据 |
||||||||||
12 |
=file("D://EMPLOYEE.btx").cursor@b(GENDER;1:2) |
=A12.fetch() |
读取通过f.export@z()导出的集文件(即分段二进制文件)EMPLOYEE.btx中的字段GENDER,使用f.export@z()导出的二进制文件EMPLOYEE.btx缺省包含字段名。 |
||||||||||
13 |
=file("D://EMPLOYEE1.btx").cursor@b(;1:2) |
=A13.fetch() |
读取f.export@b()导出的二进制文件EMPLOYEE1.btx,并且将文件内容分成2份,取第1份 |
||||||||||
14 |
=file("D://Department.txt").cursor@ts() |
=A14.fetch() |
不拆分字段,游标内容为单字段串构成的序表: |
||||||||||
15 |
=file("D://StuName.txt").cursor@i() |
=A15.fetch() |
StuName.txt为单字段文件,游标内容为序列 |
||||||||||
16 |
=file("D://EMPLOYEE1.txt").cursor@tc() |
=A16.fetch() |
|
||||||||||
17 |
=file("D://Department3.txt").cursor@e(EID) |
=A17.fetch() |
Department3.txt文件中没有字段EID,结果返回空,若不使用@e选项,则会报错,报错信息为:EID: field is not found。 |
||||||||||
18 |
=file("D://Department2.txt").cursor@tq(;,"|") |
=A18.fetch() |
Department2.txt中内容如下 B19结果如下 |
||||||||||
19 |
=file("D://Department.txt").cursor@tm(DEPT:string,MANAGER:int;3,"/") |
|
将游标分为3段,A19返回成多路游标 |
||||||||||
20 |
=file("D://Sale1.txt").cursor(#1,#3) |
=A20.fetch() |
Sale1.txt内容如下: B20的结果如下 |
||||||||||
21 |
=file("D:/Dep3.txt").cursor@cqo() |
=A21.fetch() |
使用@o选项,串中两个引号表示一个引号,返回结果: |
||||||||||
22 |
=file("D:/Dep1.txt").cursor@k() |
=A22.fetch() |
保留数据项两端的空白符 |
||||||||||
23 |
=file("D:/Department1.txt").cursor@t(id:int,name;,"|") |
=A23.fetch() |
返回Department1.txt中的字段id与name |
||||||||||
24 |
=file("D:/Department1.txt").cursor@td(id:int,name;,"|") |
=A24.fetch() |
行内有数据不匹配类型时删除该行,对比B23的结果,可以看到id为a的行被删除 |
||||||||||
25 |
=file("D:/Department1.txt").cursor@tv(id:int,name;,"|") |
=A25.fetch() |
检查类型匹配且出错时抛出违例,中断程序,输出出错行的内容,对比B23的结果,可以看到id为a的行类型不匹配。 |
||||||||||
26 |
=file("D:/Dep2.txt").cursor@tdn(id:int,name,surname;,"|") |
=A26.fetch() |
Dep2.txt文件内容: 第6、8行列数与第一行不匹配,故忽略 |
|
|||||||||
|
27 |
=file("D:/Desktop/DemoData/txt/City.txt").cursor@w() |
=A27.fetch() |
使用@w选项,将每行读成序列的序列 |
|
||||||||
|
28 |
=file("D://t1.txt").cursor@c() |
=A28.fetch() |
t1.txt文件内容: 使用@c选项,分隔符缺省使用逗号,返回结果: |
|
||||||||
|
29 |
=file("D://t1.txt").cursor@cp() |
=A29.fetch() |
使用@p选项,解析时处理括号和引号匹配 |
|
||||||||
|
30 |
=file("D://t1.txt").cursor@cpa() |
=A30.fetch() |
使用@a选项,将单引号作为引号处理 |
|
||||||||
|
31 |
=file("D://t2.txt").cursor@l() |
=A31.fetch() |
t2.txt内容如下: 使用@l选项,行尾为转义符\时允许续行 |
|
||||||||
|
32 |
=A32.fetch() |
使用@f选项,直接用分隔符拆成串 |
|
|||||||||
相关概念:
描述:
将实表/内表分段后返回指定段的游标
语法:
T.cursor(x:C,…;wi,...;k:n)
备注:
把实表/内表T分成n段,然后将第k段的数据经过x计算和过滤条件wi过滤后,返回以C为字段名的游标。从附表中查询的数据也可以包括主表中的字段。
T为复组表时,所有分表统一分段。
选项:
@m |
T.cursor@m(x:C…;w;n) 生成路数为n的多路游标。参数n省略时用系统缺省值n为整数, n<2时返回普通游标,n省略则用【工具】-【选项】中的【多路游标缺省路数】值。 |
@v |
生成纯序表列式游标,相较普通游标性能有所提升。 |
@x |
游标取完则自动关闭T |
@z |
T是复组表时,在分表之间按维(及前面的字段)归并,此时分表必须同步分段 |
参数:
T |
实表/内表 |
x |
表达式 |
C |
列别名,可省略 |
wi |
过滤条件,缺省读取全集,多个条件之间用逗号隔开,为AND关系。 过滤条件中还支持如下三种写法: 1. K:Ti的写法,K表示实表中的字段,Ti表示主键为K的序表,过滤条件中的K:Ti表示过滤掉实表中不存在K=Ti.find(K)的记录;如果K没有在选出字段中,则仅过滤。 3.K:Ti:#的写法,K=Ti(K),用序号定位,越界或Ti(K)为false/null时过滤掉 |
k |
正整数,第k段,k小于等于n |
n |
正整数,分段数 |
返回值:
单路游标或多路游标
示例:
|
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 |
用@m选项将附表table4生成多路游标 |
|
18 |
=create(k1,k2).record([1,”aa”,2,”bb”,3,”uh”,6,”kkj”,7,”fdf”,10,”wwwww”]).keys(k1) |
返回主键为k1的序表 |
19 |
=A6.open() |
打开组表tb4.ctx |
20 |
=A19.cursor(;k1:A18;1:3).fetch() |
从基表中取出字段k1、c1字段,筛选条件为k1字段值包含于A18序表的k1字段值 |
21 |
=A19.cursor(;k1:A18:null;1:3).fetch() |
从基表中取出字段k1、c1字段,筛选条件为k1字段值不包含于A18序表的k1字段值 |
22 |
=A19.cursor(;k1:A18:#;1:3).fetch() |
从基表中取出字段k1、c1字段,筛选条件为k1=A18(k1) |
|
A |
|
1 |
=file(“employee1.ctx”) |
生成组表文件employee1.ctx |
2 |
创建组表employee1.ctx的基表,EID、NAME、GENDER、SALARY为基表的列名,其中EID表示维 |
|
3 |
=connect(“demo”).cursor(“select EID,NAME,GENDER,SALARY from employee”) |
返回游标 |
4 |
将A3游标中的记录追加到基表A2中 |
|
5 |
返回列式游标,游标取完自动关闭A2游标 |
|
6 |
=A5.groups(GENDER;avg(SALARY):SALARY_AVG) |
对游标中的数据进行分组聚合运算 |
7 |
=A2.cursor(;SALARY>2000) |
报错,提示“Stream Closed” |
|
A |
|
1 |
=connect("demo").cursor("select EID,NAME,GENDER,SALARY from employee") |
|
2 |
=file("emp.ctx":[1,2]) |
生成文件组 |
3 |
=A2.create@y(#EID,NAME,GENDER,SALARY;if(GENDER=="F",1,2)) |
返回复组表 |
4 |
=A3.append@x(A1) |
将A1游标中的数据追加到复组表中 |
5 |
=A3.cursor@z(EID,NAME,GENDER,SALARY;SALARY>5000;1:4) |
将复组表分成4段返回第1段,分表之间按维EID归并 |
描述:
将集群实表/集群内表中的指定列返回成集群游标
语法:
T.cursor(x,…;wi,...)
备注:
将集群实表/集群内表中的数据经过x计算和过滤条件wi过滤后,返回成集群游标。复写表在分机间拆分。
选项:
@m |
T.cursor@m(x…;wi,...;n) 生成路数为n的同分布的集群多路游标,复写内表将被两层拆分。 n为正整数,表示分段数, n<2时返回普通游标,n省略则用【工具】-【选项】中的【多路游标缺省路数】值。 |
参数:
T |
集群实表/集群内表 |
x |
表达式 |
wi |
过滤条件,缺省读取全集,多个条件之间用逗号隔开,为AND关系。
过滤条件中还支持如下三种写法: 1. K:Ti的写法,K表示实表中的字段,Ti表示主键为K的序表,过滤条件中的K:Ti表示过滤掉实表中不存在K=Ti.find(K)的记录;如果K没有在选出字段中,则仅过滤。 2.K:Ti:null的写法,能找到的将被过滤掉。 3.K:Ti:#的写法,K=Ti(K),用序号定位,越界或Ti(K)为false/null时过滤掉 |
返回值:
集群(多路)游标
示例:
|
A |
|
1 |
=file("D:/tb4.ctx","169.254.121.62:8281") |
打开集群文件 |
2 |
=A1.open() |
返回集群组表 |
3 |
=A2.attach(table3) |
取出集群实表table3 |
4 |
=A2.cursor() |
返回集群游标 |
5 |
=A3.cursor(NAME,GENDER;EID<6) |
将EID<6的NAME,GENDER列返回成集群游标 |
6 |
=file("tb5.ctx","192.168.31.72:8281") |
|
7 |
=A6.open() |
|
8 |
=A7.cursor@m(;;3) |
生成路数为3的集群多路游标 |
9 |
=A7.cursor() |
|
10 |
=A9.memory() |
生成集群内表 |
11 |
=A10.cursor() |
返回集群游标 |
描述:
根据多路游标同步分段实表/内表,返回多路游标
语法:
T.cursor(x:C,…;wi,...;mcs)
备注:
根据多路游标mcs同步分段实表/内表T,返回多路游标;用T和mcs的首字段对应同步。在同步分段T时需要分段字段一致。在使用多个实表时,需要避免分段的不同步,此时就可以使用多路游标同步。
参数:
T |
实表 |
x |
表达式 |
C |
列别名 |
wi |
过滤条件,缺省读取全集,多个条件之间用逗号隔开,为AND关系。 过滤条件中还支持如下三种写法: 1. K:Ti的写法,K表示实表中的字段,Ti表示主键为K的序表,过滤条件中的K:Ti表示过滤掉实表中不存在K=Ti.find(K)的记录;如果K没有在选出字段中,则仅过滤。 2.K:Ti:null的写法,能找到的将被过滤掉。 3.K:Ti:#的写法,K=Ti(K),用序号定位,越界或Ti(K)为false/null时过滤掉 |
mcs |
由实表生成的多路游标 |
选项:
@k |
用mcs的首键对应 |
@v |
生成纯序表列式游标,相较普通游标性能有所提升。 |
@x |
游标取完则自动关闭T |
@z |
T是复组表时,在分表之间按维(及前面的字段)归并 |
返回值:
多路游标
示例:
|
A |
|
1 |
for 100 |
|
2 |
返回序表 |
|
3 |
=to(10000).new(#:k1,rand(10000):c2).sort@o(k1) |
返回序表 |
4 |
=to(10000).new(#:k1,rand()*1000:c3).sort@o(k1) |
返回序表 |
5 |
=A2.cursor() |
返回游标 |
6 |
=A3.cursor() |
返回游标 |
7 |
=A4.cursor() |
返回游标 |
8 |
=file("D:\\cs1.ctx") |
生成组表文件 |
9 |
=A8.create(#k1,c1) |
创建组表的基表 |
10 |
=A9.append(A5) |
将A5游标中的数据追加到基表中 |
11 |
=A9.attach(table1,c2) |
在基表上创建附表table1 |
12 |
=A11.append(A6) |
将A6游标中的数据追加到附表table1中 |
13 |
=A11.cursor@m(;;2) |
对附表table1进行分段,结果返回多路游标 |
14 |
=A9.attach(table2,c3) |
在基表上创建附表table2 |
15 |
=A14.append(A7) |
将A7游标中的数据追加到附表table2中 |
16 |
=A14.cursor@v(;;A13) |
根据多路游标A13同步分段附表table2 |
|
A |
|
1 |
=connect("demo").cursor("select EID,NAME from employee") |
|
2 |
=file("emp.ctx") |
生成组表文件 |
3 |
=A2.create@y(#EID,NAME) |
创建组表的基表 |
4 |
=A3.append(A1) |
将A1游标中的数据追加到组表基表中 |
5 |
=A4.cursor@m(;;3) |
将组表生成路数为3的多路游标 |
6 |
=connect("demo").cursor("select EID,NAME,GENDER,SALARY from employee") |
|
7 |
=file("emp.ctx":[1,2]) |
生成文件组 |
8 |
=A7.create@y(#EID,NAME,GENDER,SALARY;if(GENDER=="F",1,2)) |
创建复组表 |
9 |
=A8.append@x(A6) |
将A6游标中的数据追加到复组表中 |
10 |
=A8.cursor@z(EID,NAME,GENDER,SALARY;SALARY>5000;A5) |
将复组表根据多路游标A5同步分段,在分表之间按维EID归并 |
描述:
根据集群多路游标同步分段集群实表,返回集群多路游标
语法:
T.cursor(x:C,…;wi,...;mcs)
备注:
根据集群多路游标mcs同步分段集群实表T,返回集群多路游标;用T的维和mcs的键对应同步,T和mcs分布方式必须一致。在同步分段集群实表时需要分段字段一致。在使用多个集群实表时,需要避免分段的不同步,此时就可以使用集群多路游标同步。
参数:
T |
集群实表 |
x |
表达式 |
C |
列别名 |
wi |
过滤条件,缺省读取全集,多个条件之间用逗号隔开,为AND关系。 过滤条件中还支持如下三种写法: 1. K:Ti的写法,K表示实表中的字段,Ti表示主键为K的序表,过滤条件中的K:Ti表示过滤掉实表中不存在K=Ti.find(K)的记录;如果K没有在选出字段中,则仅过滤。 2.K:Ti:null的写法,能找到的将被过滤掉。 3.K:Ti:#的写法,K=Ti(K),用序号定位,越界或Ti(K)为false/null时过滤掉 |
mcs |
由集群实表生成的集群多路游标 |
返回值:
集群多路游标
示例:
|
A |
|
1 |
=file("cs1.ctx","169.254.121.62:8281") |
|
2 |
=A1.open() |
打开集群组表 |
3 |
=A2.attach(table1) |
取出集群实表table1 |
4 |
=A3.cursor@m(;;2) |
返回集群多路游标 |
5 |
=A2.attach(table2) |
取出集群实表table2 |
6 |
=A5.cursor(;;A4) |
集群实表table2根据集群实表table1多路游标同步分段,table1与table2的分段字段需要一致。 |
描述:
从虚表对象中取出游标
语法:
T.cursor(xi:Ci,…)
备注:
从虚表T中取出游标,xi为字段表达式,Ci为游标中的字段名,缺省为虚表的字段名,xi:Ci省略时取出所有字段。
参数:
T |
虚表 |
xi |
字段表达式 |
Ci |
结果序表的字段名 |
选项:
@v |
组表第一次加载时用列式,提升性能。 |
返回值:
游标
示例:
|
A |
|
1 |
=create(file).record(["D:/file/pseudo/empT.ctx"]) |
|
2 |
=pseudo(A1) |
生成虚表对象 |
3 |
=A2.cursor() |
从虚表中取出游标,无参数时取出所有字段 |
4 |
=A3.fetch() |
游标中的数据内容 |
5 |
=A2.cursor(EID:eid,NAME,SALARY:salary) |
从虚表中取出游标,取出字段包含EID、NAME、SALARY,列名为eid、NAME、salary |
6 |
=A5.fetch() |
游标中的数据内容 |
描述:
多路游标归并转成n路游标
语法:
mcs.cursor(n)
备注:
多路游标归并转成n路游标,n比原来的路数小,缺省转成单路游标。
参数:
mcs |
多路游标 |
n |
列名 |
返回值:
单路游标或多路游标
示例:
|
A |
|
1 |
=demo.query("select * from EMPLOYEE").cursor@m(5) |
返回多路游标,路数为5 |
2 |
=A1.cursor(3) |
将多路游标归并转成3路游标 |
3 |
=A2.cursor() |
将多路游标转为单路游标 |