通过REF CURSOR从得到的Table变量游标是否安全
我通过下面的代码从Table1中取出前10条记录,通过REF CURSOR输出到客户端的RecordSet中,测试通过。
但是我有个问题弄不太明白,代码中的rowSet是局部的表变量,输出的指向它的游标指针是在过程调用完毕后才使用的,过程调用结束了,这个过程中的局部变量对应的内存应该是无效了才对啊,为什么这个游标还能在客户端使用呢?
是否有潜在的问题啊?比如这个游标指向的实际是已经释放的内存,是不安全的
哪位大虾能帮忙解答一下,thx!
CREATE type TRow as object ( "ID" NUMBER(10,0),
"TEXT" VARCHAR2(20) );
CREATE type TRowSet as TABLE OF TRow;
declare
type TRefCursor is REF CURSOR;
procedure f( pCur in TRefCursor )
as
rowSet TRowSet := TRowSet();
rowItem TRow := TRow( NULL, NULL );
CURSOR curTable1 is SELECT * FROM TABLE1;
begin
open cruTable1;
for i in 1..10 loop
fetch curTable1 into rowItem.ID, rowItem.TEXT;
exit when curTable1%NOFOUND;
rowSet.Extend();
rowSet(i) := rowItem;
end loop;
open pCur for SELECT * FROM TABLE( CAST( rowSet as TRowSet ) );
end;