zoukankan      html  css  js  c++  java
  • 闪回查询

    运行环境: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密切合作,来决定这个功能可以让你闪回到多远,以及在应用中通常如何使用。

  • 相关阅读:
    6.1成果(冲刺2.10)
    5.31成果(冲刺2.9)
    5.30成果(冲刺2.8)
    5.29成果(冲刺2.7)
    5.28成果(冲刺2.6)
    5.27成果(冲刺2.5)
    5.26成果(冲刺2.4)
    5.25成果(冲刺2.3)
    Nginx location匹配后 跳转问题
    记一次centos上发布core,访问502的bug
  • 原文地址:https://www.cnblogs.com/ray-bk/p/9720401.html
Copyright © 2011-2022 走看看