7.2.1使用游标读取数据

在游标创立后,可以用cs.fecth() 函数读取数据。与读取普通数据表不同,在用游标读取数据时,并不会一次读出全部数据,而是需要指定返回记录的条数,或者读取数据的条件。如:

 

A

1

=file("Order_Books.txt")

2

=A1.cursor@t()

3

=A2.fetch(1000)

4

>A2.close()

5

=A2.fetch(1000)

A2中创建外存文件游标,A3中读取出前1000条数据如下:

使用fetch函数时,每次从游标中读取出的数据都会构成一个序表返回。A4中,调用cs.close() 函数关闭。游标关闭后,就无法再从中读取数据,如A5中的结果是null

游标使用后,如果不再需要,应该调用cs.close() 函数关闭,以确保释放所占内存。

 

除了读出文件或者数据库结果集中的数据,还可以在游标中用cs.skip() 跳过指定条数的记录,如:

 

A

1

=file("Order_Books.txt")

2

=A1.cursor@t()

3

>A2.skip(45000)

4

=A2.fetch()

5

=A2.fetch(1000)

A2中创建游标,A3中跳过45,000条记录,此时A4从游标中读取数据如下:

从交易ID中可以看到,读取数据时,是从第45001条记录开始的。可以注意到A4中的fetch函数中未指定返回记录的条数,此时将读取出游标中剩余的所有数据。当游标中数据被读取完毕后,游标会自动关闭,在这种情况下,可以不必再调用close

如果此时在A5中再试图从A2的游标中读取数据,是读取不到结果的:

实际上,游标中的数据,无论是skip或是fetch,只会从前向后执行一次遍历,读取完毕或者直接调用close关闭后,就无法再次使用。

 

使用fetch函数读取游标中的数据时,还有一种方式是cs.fetch(;x) 指定读取条件,读取时会一直执行到条件表达式x的值发生变化为止。如:

 

A

1

=file("Order_Books.txt")

2

=A1.cursor@t()

3

=A2.fetch(;Date)

4

=A2.fetch(1000)

5

>A2.close()

A2中创建游标,A3从游标中读取数据,一直到Date发生改变为止,读出的数据如下:

可以看到,A3中读取出了所有日期是2013-01-01的数据。如果A4中再继续从A2的游标中读取数据,将从2013-01-02开始:

需要注意的是,读取数据时,不能同时指定记录条数和读取条件,否则只有读取条件是有效的。另外,本例中游标A2中的数据并未全部取出,使用之后在A5中将其关闭。

类似的,使用skip函数跳过游标中的记录时,同样可以指定条件,如:

 

A

1

=file("Order_Books.txt")

2

=A1.cursor@t()

3

>A2.skip(;Date)

4

>A2.skip(;Date)

5

>A2.skip(;Date)

6

=A2.fetch(1000)

7

>A2.close()

A2中创建游标,在A3A4A5中分别跳过1天的记录。此时A6再从游标中读取数据,将从第4天开始:

同样的,当游标中的数据未全部取出时,在A7中调用close函数关闭游标。