我知道这是一个新手问题,但是游标让我感到困惑:
CREATE OR REPLACE FUNCTION f RETURN SYS_REFCURSOR
AS
c SYS_REFCURSOR;
BEGIN
OPEN c for select * from dual;
RETURN c;
END;
/
我没有得到的代码的主要部分是:
OPEN c for select * from dual;
那里发生了什么?
谢谢!
答案 0 :(得分:2)
简而言之,游标逐行评估数据,而任何其他SQL查询都会评估整个数据集。
不惜一切代价避免使用游标,因为它们的效率低于传统的SQL查询。光标不是在整个数据集上操作,而是在单个行上操作。相同的最终结果,当它是光标时速度要慢得多。
有些情况证明使用游标是合理的,但在100次中有99次,它们可以而且应该避免使用。