fetch()

阅读(3525) 标签: fetch,

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

cs.fetch()

描述:

打开游标/集群游标/多路游标读取记录

语法:

cs.fetch(n;x)

备注:

打开游标/集群游标/多路游标cs读取记录。

有参数n时,读取n条记录;

有参数x时,读取至x有变化(x不是逻辑值)或x为真(x是逻辑值);

nx两个参数只有一个有效,nx都省略时读取cs剩余所有记录关闭游标。

读取结果形成序列/排列/序表返回cs已到头返回空。多路游标获取记录时结果次序不确定。

该函数常用于大数据量的分批取数

选项:

@0

返回的数据并不从游标中实际取出,相当于从游标中复制,不支持x

@x

取出数据后关闭该游标。

参数:

cs

游标/集群游标/多路游标

n

正整数。

x

分组表达式,csx有序,有x时忽略n

返回值:

序列/排列/序表

示例:

cs为游标,有参数n

 

A

 

1

=connect("demo").cursor("select top 10 EID,NAME,DEPT,SALARY from employee")

返回的游标中有10条记录。

2

=A1.fetch(3)

参数n3,从A1游标中读取3条记录(实际业务中游标数据量较大时,通常适合分批取数):

3

=A1.fetch(5)

A1游标中继续读取记录,由于A2中已取出3条,所以继续从第4条开始往后取5条记录:

3

>A1.close()

关闭游标。

cs为游标,有参数xx非逻辑值

 

A

 

1

=connect("demo").cursor("select top 20 EID,NAME,DEPT,SALARY from employee").sortx(DEPT)

返回的游标内容对DEPT字段有序。

2

=A1.fetch(;DEPT)

参数xDEPT,读取游标记录至DEPT字段值有变化,结果如下:

3

=A1.fetch()

参数省略,读取游标中剩余所有记录后关闭游标:

4

=A1.fetch()

由于在A3中已将游标中的数据取完并关闭游标,所以A4返回结果为null

cs为游标,有参数xx为逻辑值

 

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.1101.emp.ctx中包含GENDER值为F的数据,节点机192.168.18.1432.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取值结果可以看到,取出的记录数据内容并不相同。这是因为多路游标取数时,是每一路中取一点然后合并起来,而单路游标取数时是按照顺序取得,所以结果值才不同。

 

相关概念:

db.cursor()

cs.skip()

ch.fetch()

描述:

保留管道当前数据。

语法:

ch.fetch(f)

备注:

保留管道ch的当前数据,有参数f时将结果写入集文件f。该函数为结果集函数。

参数:

ch

管道。

f

集文件。

返回值:

管道

示例:

 

A

 

1

=demo.cursor ("select * from SALES")

 

2

=channel()

创建管道。

3

=channel()

 

4

=A2.select(ORDERID>100)

给管道附加ch.select()计算动作。

5

=A3.select(ORDERID>100)

 

6

=A2.fetch()

A2管道附加结果集函数ch.fetch(),保留管道当前数据。

7

=A3.fetch("sales.btx")

A3管道附加结果集函数ch.fetch(),并将结果写入到主目录下的集文件sales.btx中。

8

=A1.push(A2,A3)

A1中的数据推送到管道。

9

=A1.fetch()

 

10

=A2.result()

获取管道计算结果。