码迷,mamicode.com
首页 > 其他好文 > 详细

闪回查询

时间:2018-09-28 20:33:00      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:use   创建   moni   table   tput   back   select   使用   ash   

运行环境:SQLPLUS, SERVEROUTPUT已打开

下列语句创建了表和数据:

CREATE TABLE plch_products
(
   id     NUMBER
, name   VARCHAR2 (10)
)
/

BEGIN
   INSERT INTO plch_products (id, name)
        VALUES (1, ‘Mouse‘);

   COMMIT;
END;
/

我成功地编译了下列过程:

CREATE OR REPLACE PROCEDURE plch_change_name
IS
   v_scn    NUMBER;
   v_name   plch_products.name%TYPE;
BEGIN
   UPDATE plch_products
      SET name = ‘Keyboard‘
    WHERE id = 1;

   COMMIT;

   UPDATE plch_products
      SET name = ‘Monitor‘
    WHERE id = 1;

   v_scn := DBMS_FLASHBACK.get_system_change_number;

   SELECT name
     INTO v_name
     FROM plch_products AS OF SCN v_scn
    WHERE id = 1;

   DBMS_OUTPUT.put_line (v_name);
   COMMIT;
END;
/

我执行这个代码块之后屏幕上会显示什么?

BEGIN
   plch_change_name ();
END;
/

查询返回的值是 "Keyboard"。

即使name这个列的值被修改成"Monitor",并且这个值被设置了好几秒钟,其返回的值是那个已提交过的,而非当前活跃的事务中所设置的那个值。

正如Oracle文档中所言:
闪回查询“返回的是指定时间点当时已被提交的数据”。

为了利用闪回查询功能,你需要DBMS_FLASHBACK的执行权限赋予你的schema。你还需要和DBA密切合作,来决定这个功能可以让你闪回到多远,以及在应用中通常如何使用。

 

闪回查询

标签:use   创建   moni   table   tput   back   select   使用   ash   

原文地址:https://www.cnblogs.com/ray-bk/p/9720401.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!