2015-11-07 105 views
0
create table samp 
    (
    empno number(2), 
    ename varchar2(30), 
    sal number(7,2), 
    dob date 
    ) 
SQL>/

SQL> insert into samp values(1,'MASTAN',24000,'24-JUL-1987'); 

1 row created. 

这里我没有提交数据,所以它在重做日志缓冲区,但是当检索时,下面的Query如何给出数据?内部是怎样工作的?好心建议我oracle声明如何工作?

SQL> SELECT * FROM SAMP; 

    EMPNO ENAME         SAL DOB        
---------- ------------------------------ ---------- --------- 
     1 MASTAN        24000 24-JUL-87 
+1

我认为你可以做的最好的事情是阅读11g或12c的Oracle概念指南,该指南介绍了数据库如何工作的许多细节。这是一个很大的阅读,但这样做会回答这个问题,许多人甚至不知道你还有什么。 –

+0

我想你在谈论[撤消](https://docs.oracle.com/cd/E11882_01/server.112/e25494/undo.htm#i1006145),而不是在这里重做,但无论如何,与你无关'在同一个会话中查询。如果您询问另一个会话*而不是*看到该行,则撤消操作与读取一致性相关,如文档解释。 –

回答

1

看来你没有提交或回滚,所以你从你的SELECT语句中看到正确的结果,因为它在单一的交易发生。尝试回滚并检查结果。理解事务的另一个好方法是尝试打开两个单独的sqlplus shell,并尝试在一个shell中插入语句,并在另一个shell中选择语句。