本章介绍fetch()函数的多种用法。
描述:
打开游标/集群游标/多路游标读取记录。
语法:
cs.fetch(n;x)
备注:
打开游标/集群游标/多路游标cs读取记录。
有参数n时,读取n条记录;
有参数x时,读取至x有变化(x不是逻辑值)或x为真(x是逻辑值);
n与x两个参数只有一个有效,n和x都省略时读取cs中剩余所有记录后关闭游标。
读取结果形成序列/排列/序表返回,cs已到头返回空。多路游标获取记录时结果次序不确定。
该函数常用于大数据量的分批取数。
选项:
@0 |
返回的数据并不从游标中实际取出,相当于从游标中复制,不支持x。 |
@x |
取出数据后关闭该游标。 |
参数:
cs |
游标/集群游标/多路游标。 |
n |
正整数。 |
x |
分组表达式,cs按x有序,有x时忽略n。 |
返回值:
序列/排列/序表
示例:
cs为游标,有参数n时:
|
A |
|
1 |
=connect("demo").cursor("select top 10 EID,NAME,DEPT,SALARY from employee") |
返回的游标中有10条记录。 |
2 |
=A1.fetch(3) |
参数n为3,从A1游标中读取3条记录(实际业务中游标数据量较大时,通常适合分批取数):
|
3 |
=A1.fetch(5) |
从A1游标中继续读取记录,由于A2中已取出3条,所以继续从第4条开始往后取5条记录:
|
3 |
>A1.close() |
关闭游标。 |
cs为游标,有参数x且x非逻辑值:
|
A |
|
1 |
=connect("demo").cursor("select top 20 EID,NAME,DEPT,SALARY from employee").sortx(DEPT) |
返回的游标内容对DEPT字段有序。 |
2 |
=A1.fetch(;DEPT) |
参数x为DEPT,读取游标记录至DEPT字段值有变化,结果如下:
|
3 |
=A1.fetch() |
参数省略,读取游标中剩余所有记录后关闭游标:
|
4 |
=A1.fetch() |
由于在A3中已将游标中的数据取完并关闭游标,所以A4返回结果为null。 |
cs为游标,有参数x且x为逻辑值:
|
A |
|
1 |
=connect("demo").cursor("select top 15 EID,NAME,DEPT,SALARY from employee").sortx(-SALARY) |
返回的游标内容对SALARY字段降序排序。 |
2 |
=A1.fetch(2;SALARY<10000) |
有参数x时,忽略参数n。读取游标记录至SALARY<10000为真,结果如下:
|
3 |
=A1.fetch() |
读取游标中剩余所有记录后关闭游标:
|
cs为集群游标:
|
A |
|
1 |
[192.168.0.110:8281,192.168.18.143:8281] |
分机序列。 |
2 |
=file("emp.ctx":[1,2], A1) |
分机192.168.0.110的1.emp.ctx中包含GENDER值为F的数据,节点机192.168.18.143的2.emp.ctx中包含GENDER值为M的数据。 |
3 |
=A2.open() |
打开集群组文件。 |
4 |
=A3.cursor() |
返回集群游标。 |
5 |
=A4.fetch() |
打开集群游标读取所有记录后关闭游标。 |
使用@0选项,不从游标中实际取出:
|
A |
|
1 |
=connect("demo").cursor("select top 10 EID,NAME,DEPT,SALARY from employee") |
返回游标,游标中有10条记录。 |
2 |
=A1.fetch@0(3) |
使用@0选项,从游标中读出3条记录,不实际取出:
|
3 |
=A1.fetch() |
读取游标中剩余所有记录,此时可以读取出游标A1中的所有记录,可以看到返回了10条记录:
|
使用@x选项,读取数据后关闭游标:
|
A |
|
1 |
=connect("demo").cursor("select top 10 EID,NAME,DEPT,SALARY from employee") |
返回游标,游标中有10条记录。 |
2 |
=A1.skip(5) |
A1游标跳过5条记录。 |
3 |
=A1.fetch@x(3) |
从游标中读取3条记录,由于A2中已跳过5条记录,所以此处会从第6条开始往后取3条记录:
使用@x选项,取数完成后关闭游标。 |
4 |
=A1.fetch() |
由于A3中游标已关闭,所以结果返回null。 |
cs为多路游标:
|
A |
|
1 |
=file("D:/txt_files/orders.txt").cursor@m() |
返回多路游标。 |
2 |
=A1.fetch() |
从多路游标获取记录。 |
3 |
=file("D://tb1.txt").import() |
tb1.txt中包含10w条数据。 |
4 |
=A3.cursor() |
生成单路游标。 |
5 |
=A4.fetch(15000) |
取前15000条数据:
|
6 |
=A3.cursor@m(10) |
生成多路游标。 |
7 |
=A6.fetch(15000) |
取前15000条数据:
对比A5取值结果可以看到,取出的记录数据内容并不相同。这是因为多路游标取数时,是每一路中取一点然后合并起来,而单路游标取数时是按照顺序取得,所以结果值才不同。 |
描述:
保留管道当前数据。
语法:
ch.fetch(f)
备注:
保留管道ch的当前数据,有参数f时将结果写入集文件f。该函数为结果集函数。
参数:
ch |
管道。 |
f |
集文件。 |
返回值:
管道
示例: