在游标创立后,可以用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中创建游标,在A3、A4和A5中分别跳过1天的记录。此时A6再从游标中读取数据,将从第4天开始:
同样的,当游标中的数据未全部取出时,在A7中调用close函数关闭游标。