您的位置:首页 > 其它

关于打开游标的那些事

2014-03-06 10:24 281 查看
----------------------------------------------------------------------
SQL> begin
2  for i in 1 .. 50000
3  loop
4  insert into t1 values(i,'a');
5  commit;
6  end loop;
7  end;
8  /

PL/SQL procedure successfully completed.

SESSION 1:

执行
1   declare
2	 cursor cur1 IS
3	 select a.rowid,a.id from t1 a;
4	 begin
5	 for row in cur1 loop
6	 DBMS_OUTPUT.PUT_LINE('last name: '||row.ID||'--'||row.ROWID);
7	 end loop;
8*	 end;

开始执行后

在SESSION 2:
insert into t1 values(99999999,'xxxx');
commit;

此时查看SESSION 1的spool日志:
last name: 49986--AAATA1AAEAAAE7GAAi
last name: 49987--AAATA1AAEAAAE7GAAj
last name: 49988--AAATA1AAEAAAE7GAAk
last name: 49989--AAATA1AAEAAAE7GAAl
last name: 49990--AAATA1AAEAAAE7GAAm
last name: 49991--AAATA1AAEAAAE7GAAn
last name: 49992--AAATA1AAEAAAE7GAAo
last name: 49993--AAATA1AAEAAAE7GAAp
last name: 49994--AAATA1AAEAAAE7GAAq
last name: 49995--AAATA1AAEAAAE7GAAr
last name: 49996--AAATA1AAEAAAE7GAAs
last name: 49997--AAATA1AAEAAAE7GAAt
last name: 49998--AAATA1AAEAAAE7GAAu
last name: 49999--AAATA1AAEAAAE7GAAv
last name: 50000--AAATA1AAEAAAE7GAAw
PL/SQL procedure successfully completed.
没有SESSION 2上的:
select rowid ,t1.* from t1 where t1.id=99999999;

ROWID			   ID NAME
------------------ ---------- ----------
AAATA1AAEAAAE7fAAC   99999999 xxxx

没有后来插入的t1.id=99999999的信息

实验说明:返回的结果集在打开的那一刻(时间点)就已经确定
------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: