检索多行 / 游标的活动集 |
EXEC SQL DECLARE easy CURSOR FOR SELECT fname, lname FROM customer WHERE state = 'NJ'
EXEC SQL DECLARE hard SCROLL CURSOR FOR SELECT C.customer_num, O.order_num, sum (items.total_price) FROM customer C, orders O, items I WHERE C.customer_num = O.customer_num AND O.order_num = I.order_num AND O.paid_date is null GROUP BY C.customer_num, O.order_num
通过连接三个表并将输出行分组,生成此游标的活动集。优化器可能能够使用索引来以正确的顺序产生这些行,但通常情况下,ORDER BY 或 GROUP BY 子句的使用要求在可确定哪一行标识第一行之前,数据库服务器生成所有行,将它们复制到临时表并对该表排序。
在活动集全部生成并保存在临时表中的情况下,数据库服务器可花费相当多的时间来打开游标。接着,数据库服务器可以确切地告诉程序活动集包含多少行。然而,此信息不可用。一个原因是您永远不可确定优化器会使用哪种模式。如果优化器可避免排序和临时表,则它会这样做;但在查询中、在表的大小方面或在可用的索引方面的小更改都可更改优化器的方式。