模拟一致性读实验时常用到的脚本

实验有一个重点,就是如何让一个数据查询持续很长时间,由于环境的限制,笔者不能拿到一个长时间操作的数据范围。所以,采用了一些变通方法。

 

 

set time on;

set serveroutput on;

declare

 coun number;

 cursor tes is select * from t;

 t_info t%rowtype;

begin

 coun := -1;

 

 open tes;

 loop

   fetch tes into t_info;

   coun := coun + 1;   

   dbms_lock.sleep(0.1);

   

   exit when tes%notfound;

 end loop; 

 dbms_output.put_line('Total Count: '||to_char(coun)); 

end;

/

 

 

代码中的部分就是使用游标逐条的fetch数据表t记录。关键部分在于dbms_lock方法sleep,它可以实现让代码终止一段时间,模拟长时间操作处理。这样,我们就可以在另一个会话中更从容的进行操作了

 

或者用另外一种方法:

SQL> var x refcursor                                                   //定义一个游标变量x

SQL>exec open: x for select * from t1 where id =1;//为select语句分配并打开游标X。

                                                                                         这个是关键的一步,select语句此时

                                                                                         执行而获得结果(结果保存在游标指向的内存上)

                                                                                         后不会马上退出,而是暂停在那里。

SQL>update t1 set name='TTTT' where id=1;

SQL>commit;

SQL>update t1 set name='YYYY' where id=1;

SQL>commit;

SQL>print:x                      //打印出执行语句exec open: x for select * from t1 where id =1;后所得的结果

       ID  NAME

   ------  ---------

        1  AAAA                    //(原值)

SQL>select * from t1 where id =1;

       ID  NAME

   ------  ---------

        1  YYYY

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值