2017-09-12 5 views
0

一意のIDを持たない正規化されていないテーブルで、削除操作(最古のデータを先に)を実行する必要があります。最も古いデータを決定する際に、パラメータ として日付を考慮しています。しかし、それぞれの日付は600Kレコードになります。テーブルが非常に大きいので、削除オペレーションはバッチで行います(ループ付きループ) 以下のクエリを使用しましたが、このビューではデータ操作操作が正しくありません'しかし、私はtempがテーブルのオブジェクト型であると確信しています。正規化されていないテーブルでの注文による削除

delete from (Select A.*,rownum as rn from (select * from temp order by date) A) B where B.rn<10

私は任意の代替提案をお聞かせください。

あなたのソリューションはうまくいきましたが、今は大量のレコードを削除する方法を混乱させています。私は約10百万のレコードを持っており、バッチでそれらを削除する必要があります。前もって感謝します。

答えて

2

delete fromの後のすべてはインライン表示です。インラインビューから削除することはできません。あなたの声明はdelete from TABLEでなければなりません。

delete from temp 
where rowid in (select rowid as rid 
       from (select * from temp order by date) 
       where rownum < 10) 

編集:ここに示す例は、PL/SQLループの一部です。

begin 
    loop 
    delete from temp 
    where rowid in (select rowid as rid 
        from (select * from temp order by date) 
        where rownum < 1000); 
    if SQL%ROWCOUNT = 0 then exit; end if; 
    end loop; 
end; 
/
+0

私は約10百万のレコードを持っていて、この削除クエリの周りにループを置き、一度に約1000のバッチで削除します。それはどのように可能になるでしょうか?何かお勧めしますか? – SYMA

+0

これを行う方法をお尋ねしますか?もしそうなら、私は自分の答えを更新しました。 – kfinity

関連する問題