テーブルが巨大です。アプリケーションをテストするために、テーブルから1000のレコードを除くすべてを削除したいと思います。 1000の幸運なレコードは、次のように指定できる識別子を持っていません:削除11gから1000レコードが残っていますか?
DELETE FROM HUGE_TABLE t WHERE t.IDENTIFIER!='LUCKY'
1つのSQL文にはどのような方法がありますか?
テーブルが巨大です。アプリケーションをテストするために、テーブルから1000のレコードを除くすべてを削除したいと思います。 1000の幸運なレコードは、次のように指定できる識別子を持っていません:削除11gから1000レコードが残っていますか?
DELETE FROM HUGE_TABLE t WHERE t.IDENTIFIER!='LUCKY'
1つのSQL文にはどのような方法がありますか?
numberOfRecordsOnYourDBカウントはるかに高速であることを行っていることを他の回答に同意:
一時テーブルを作成します。
CREATE TABLE HUGE_TEST AS
SELECT * FROM HUGE_TABLE WHERE ROWNUM <= 1000;
今、あなたがテストのためにこれを使用するか、またはあなたの元のテーブルを削除し、実際のテーブル名に、このテーブルの名前を変更することができます。
これは、膨大な量のデータを処理する最速の方法です。巨大なテーブルで少量のデータを更新する必要がある場合にも機能します。
DELETE FROM huge_table
WHERE id NOT IN (
SELECT id FROM (
SELECT id FROM huge_table
ORDER BY dbms_random.value
) WHERE rownum <= 1000
)
しかし、私は切り捨てと順序を回避することが
はあなたの真の乱数の別のオプションを与えるために、あなたはこれを試みることができます次のようにします。
set ROWCOUNT (numberOfRecordsOnYourDB - 1000)
delete from hugetable
Go
これは、テーブルからレコードを削除しますが、指定した行数の後で処理を停止します。
ああ、大きな値に戻しROWCOUNTを設定する、または単にSQL Serverの構文のように見える他のタスク
を行うには、新しい接続をオープンすることを忘れないでください...? –
オラクルの質問ではありませんでしたか? –