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

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

 

 

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

 

 

你可能感兴趣的:(模拟一致性读实验时常用到的脚本)