2013-05-19 23 views
1

ROLLBACK命令我創建的表使用Oracle

SQL>CREATE TABLE Student 
(
StudID   NUMBER(6), 
StudName  VARCHAR2(25), 
JoinDate  DATE 
); 
Table created. 

SQL>INSERT INTO Student 
VALUES (123,'JOHN',SYSDATE); 
1 row created. 

SQL>DELETE Student; 
1 row deleted. 

我怎樣才能拿回行? 如果我使用

SQL>ROLLBACK; 
Rollback complete. 

但在那之後

SQL>SELECT * FROM Student; 
no rows selected. 

這是爲什麼來?

回答

7

ROLLBACK告訴Oracle回滾整個事務。在你的情況下,INSERTDELETE都是同一交易的一部分,所以ROLLBACK反轉這兩個操作。這將數據庫返回到CREATE TABLE聲明後面的狀態。

一些替代方案:

  1. 如果你發出INSERTCOMMIT那麼DELETE聲明將是一個單獨的事務和ROLLBACK將逆轉DELETE聲明之功效。
  2. 您也可以在運行INSERT語句後創建一個保存點,然後在DELETE之後回滾到該保存點,而不是回滾整個事務。
+0

相反的SQL>刪除學生;我用SQL> DELETE FROM Student – bibhudash

+0

WHERE StudID = 123; – bibhudash

+0

刪除1行。然後使用ROLLBACK;然後SELECT * FROM Student;它的工作原理。 – bibhudash

0

嘗試

 
    CREATE TABLE your_table 
    AS SELECT * FROM employees; 

    ALTER TABLE your_table 
    ENABLE ROW MOVEMENT; 

    UPDATE your_table 
     SET CON_TYPE = 'N'; 

    FLASHBACK TABLE your_table 
     TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' minute); 
      /*if you want to restore the table*/ 
     FLASHBACK TABLE print_media TO BEFORE DROP; 

    /*Restore the table with other name*/ 
     FLASHBACK TABLE your_table TO BEFORE DROP RENAME TO your_table;