在跨网游标调用的网格文件中,有可能会返回多个结果。如D:\files\FindEmployees2.dfx如下:
|
A |
1 |
$(demo) select * from EMPLOYEE where DEPT = ?;arg1 |
2 |
return A1.select(GENDER=="F") |
3 |
return A1.select(GENDER=="M") |
在网格中,从数据库中查询出某个部门的员工数据,并在A2中用return语句返回其中女员工构成的排列,在A3中用return语句返回其中男员工构成的排列。网格参数和上一节中的设定相同。
在主网格中调用跨网游标如下:
|
A |
1 |
=cursor("FindEmployees2.dfx") |
2 |
=A1.fetch() |
在调用cursor生成跨网游标时,如果没有使用参数,计算时将使用网格参数的默认值。即查询部门HR的数据。执行后,A2中返回的结果如下:
结果序表中,前半部分是人力资源部女员工的数据,后半部分是人力资源部男员工的数据。从结果中可以看到,当调用的网格用多个return语句返回了多个结果时,在使用跨网游标时,会将各个结果依次拼接在一起。
由于调用返回多个结果的网格时,返回的结果会被同一个游标返回,因此,返回的所有结果必须具有相同的数据结构,否则会产生错误。
为了更清楚地了解执行情况,在被调用的网格中添加output语句,修改为D:\files\FindEmployees3.dfx如下:
|
A |
1 |
$(demo) select * from EMPLOYEE where DEPT = ?;arg1 |
2 |
>output("return GENDER F") |
3 |
return A1.select(GENDER=="F") |
4 |
>output("return GENDER M") |
5 |
return A1.select(GENDER=="M") |
在网格中,从数据库中查询出某个部门的员工数据,并在A2中用return语句返回其中女员工构成的排列,在A3中用return语句返回其中男员工构成的排列。网格参数和上一节中的设定相同。
调用跨网游标如下:
|
A |
B |
1 |
=cursor("FindEmployees3.dfx") |
[] |
2 |
for A1,5 |
>output("fetch"+string(#A2)) |
3 |
|
>B1=B1|A2 |
在这里跨网游标中的数据量很少,只是为了说明游标的调用情况。在A2中循环游标中的数据,每次获取5条记录,循环时,在B2中输出信息,在B3中将游标中返回的数据拼到B1的排列中。执行后B1中的数据与前面的结果是相同的,仍然是人力资源部中女员工与男员工组成的数据。控制台中的输出结果如下:
从输出结果中可以看到,在FindEmployees3.dfx被主网格调用时,会根据需要返回的记录数,逐步执行。当A3中女员工的记录全部返回之后,才会继续向后执行,返回男员工数据。