在用游标读取数据时,还可以用for语句来循环游标中的数据。如:
|
A |
B |
1 |
=file("Order_Books.txt") |
|
2 |
=A1.cursor@t() |
0 |
3 |
for A2,1000 |
=A3.select(SalesID==1).sum(Amount) |
4 |
|
>B2=B2+B3 |
在A2中创建游标,并在A3中循环游标,每次读出1000条记录,所有记录遍历完成后自动关闭游标。在A3的代码块中,根据每次取出的序表来计算1号销售员的总销售额,并记录在B2中,结果如下:
在循环游标时,有时并不会遍历所有数据,如:
|
A |
B |
C |
1 |
=file("Order_Books.txt") |
|
|
2 |
=A1.cursor@t() |
[] |
|
3 |
for A2,1000 |
=A3.select(SalesID==1) |
>B2=B2|B3 |
4 |
|
if B2.len()>=5 |
>B2=B2(to(5)) |
5 |
|
|
break |
6 |
>A2.close() |
|
|
在A2中创建游标,并在A3中循环游标,每次读出1000条记录。在A3的代码块中,根据每次取出的数据选出1号销售员的销售记录,并记录在B2中。当找到前5条记录后,停止循环。此时,B2中结果如下:
必须要注意的是,当完成计算,用break退出循环时,游标中的数据并未全部读取出来,这和前一个例子中的情况不同,游标并不会自动关闭。因此,A6中调用了close函数,关闭游标以清除其占用内存。
与fetch和skin类似,循环游标时,也可以设定条件,每次读取数据时都执行到条件表达式发生变化为止,如:
|
A |
B |
C |
1 |
=file("Order_Books.txt") |
|
|
2 |
=A1.cursor@t() |
=create(Date,Count,Amount) |
|
3 |
for A2;Date |
=A3.count() |
=round(A3.sum(Amount)) |
4 |
|
>B2.insert(0,A3.Date,B3,C3) |
|
此时在A3中每次读出1天的销售数据,在其代码块中计算出每天的交易笔数及总金额,记录在B2的序表中。计算完成后,B2中的结果如下: