2016-03-29 10 views
0

私は私が手に私は上記のクエリをロールバックし、それが正常に完了しているが、ロールバックが

select *from patient; 

を照会すると、私は今、1行

delete from patient where pid=500; 

を削除するテーブルを持っている:

012 "は行が選択されていません"

セッション内のすべての操作を元に戻しましたか?

テーブル構造が存在し、私の知っているとおり、削除 は、ロールバックで取り出せるレコードを削除するだけですか、それとも私の挿入をコミットしなかったのでしょうか?

+0

に設定する必要があるので、実際に 'delete'ステートメントでいくつの行が削除されるのでしょうか? SQLクライアントは通常、その番号を表示します(「* 42行削除された*」など) –

+1

は、PID = 500の行でありコミット済みですか?挿入してから削除してからロールバックすると、元の空の状態になります。 –

+0

私は挿入後のために私はそれをコミットすると、私はそれらを削除した後にロールバックによってレコードを取得することができるので、削除とロールバックは正常に動作します。 –

答えて

0
  1. から削除すると、テーブル構造ではなくデータのみが削除されます。
  2. DELETE from文でロールバックが機能するはずです。この文は、削除する前にセーブポイントを作成します。
  3. それはまだ動作しない場合は、テーブルのためのフラッシュバックが戻ってデータを取得するために、有効になっている場合:あなたは、テーブルをロールバックしたい分で

    ALTER TABLE xxTABLENAMExx 
        ENABLE ROW MOVEMENT; 
    
    FLASHBACK TABLE xxTABLENAMExx 
        TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '20' minute); 
    
    ALTER TABLE xxTABLENAMExx 
        DISABLE ROW MOVEMENT; 
    

を入力してください期間に。

0

デフォルトの設定autocommit onで実行する任意の種類のJavaツールまたはその他のツールを使用している場合、ロールバック機能が失われた(フラッシュバックはまだオプションです)、ロールバックを使用すると、これはセッションautocommit onの結果になりますあなたのセッションをautocommit off

+0

あなたの答えに感謝し、私はSQL * Plusを使用しています。 –

+0

sqlplusが実行されているときに、自動コミットをオフにし、試行よりも – elirevach

関連する問題