我在SQL Server和Oracle上编码 当我在SQL Server中编码时,我使用了这个:
OPEN curUSERS;
CLOSE curUSERS;
DEALLOCATE curUSERS;
现在,当我在Oracle编写代码时,我使用了这个:
OPEN curUSERS;
CLOSE curUSERS;
我在PL / SQL中看到了一个DEALLOCATE关键字但是当我使用这个语句时
DEALLOCATE(curUSERS);
它会抛出错误。如何在PL / SQL中执行相同的操作(解除分配)?
答案 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;
/