如何在PLSQL中释放游标?

时间:2014-10-24 23:09:38

标签: oracle plsql cursor

我在SQL Server和Oracle上编码 当我在SQL Server中编码时,我使用了这个:

OPEN curUSERS;
CLOSE curUSERS;
DEALLOCATE curUSERS;

现在,当我在Oracle编写代码时,我使用了这个:

OPEN curUSERS;
CLOSE curUSERS;

我在PL / SQL中看到了一个DEALLOCATE关键字但是当我使用这个语句时

DEALLOCATE(curUSERS);

它会抛出错误。如何在PL / SQL中执行相同的操作(解除分配)?

2 个答案:

答案 0 :(得分:7)

Oracle并不需要明确释放游标的内存。只需CLOSE(cursor)即可。

答案 1 :(得分:-1)

应尽可能避免使用显式游标。显式游标需要更多代码并且速度较慢,因为它们不会自动批量收集。游标FOR循环简单快速。

示例架构

drop table table1;
create table table1 as select 1 a from dual;

明确游标 - 代码越多,性能越差

declare
    v_a number;
    cursor table1_cursor is select a from table1;
begin
    open table1_cursor;
    loop
        fetch table1_cursor into v_a;
        exit when table1_cursor%notfound;
        dbms_output.put_line(v_a);
    end loop;
    close table1_cursor;
end;
/

用于循环的游标 - 代码更少,性能更佳

begin
    for table1_rows in (select a from table1)
    loop
        dbms_output.put_line(table1_rows.a);    
    end loop;
end;
/