8

テーブルを作成しました

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.

なぜこれが来るのですか?

4

3 に答える 3

16

ROLLBACKトランザクション全体をロールバックするように Oracle に指示します。あなたの場合、INSERTと の両方DELETEが同じトランザクションの一部であるため、ROLLBACK両方の操作が逆になります。CREATE TABLEこれにより、データベースはステートメントの直後の状態に戻ります。

いくつかの代替案:

  1. COMMITの後にを発行するとINSERTDELETEステートメントは別のトランザクションになり、ROLLBACKはステートメントの効果のみを反転させDELETEます。
  2. トランザクション全体をロールバックするのではなく、INSERTステートメントの実行後にセーブポイントを作成し、その後にそのセーブポイントにロールバックすることもできます。DELETE
于 2013-05-19T07:58:59.730 に答える
0

試す

    CREATE TABLE your_table
     AS SELECT * FROM 従業員;

     ALTER TABLE your_table
     行の移動を有効にします。

     UPDATE your_table
      SET CON_TYPE = 'N';

    FLASHBACK TABLE your_table
       TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' 分);
           /*テーブルを復元したい場合*/
       FLASHBACK TABLE print_media TO BEFORE DROP;

    /*別の名前でテーブルを復元*/
       FLASHBACK TABLE your_table TO BEFORE DROP RENAME TO your_table;
于 2015-08-04T20:21:16.387 に答える