1

「削除時」トリガーがあるとします

1 削除を実行するとどうなりますか?

トリガーが起動され、トリガー本体が実行されます

  1. トランケートを起動するとどうなりますか?

    私の推測 - truncate(DDL) と delete(DML) はまったく異なるコマンドであるため、何も起こりません

もう 1 つの質問: トリガーは DDL ステートメントで起動されませんよね?

4

2 に答える 2

2

@Eggiが言うように、あなたはあなたの質問のあなたの主張に正しいです。

彼の答えと彼のリンクで与えられた詳細に加えて、TRUNCATEあなたのテーブルの最高水準点をリセットしますが、そうでDELETEはありません。

テーブルのサイズが大幅に変化する場合、これは非常に適切である可能性があります。

AskTomから:

Oracleは、フルスキャン中にデータが含まれていない場合でも、HWMの下のすべてのブロックをスキャンするため、HWMは適切です。これは、特にHWMの下のほとんどのブロックが空の場合、フルスキャンのパフォーマンスに影響を与えます。これを確認するには、1,000,000行のテーブルを作成し(または多数の行のテーブルを作成し)、このテーブルからSELECT COUNT()を実行します。ここで、その中のすべての行を削除すると、SELECT COUNT()1,000,000をカウントする場合と同じように、0行をカウントするのに同じくらいの時間がかかります(ブロックをクリーンアップする必要がある場合は、それ以上かかります!第9章の「ブロックのクリーンアウト」セクションを参照してください)。これは、OracleがHWMの下のすべてのブロックを読み取って、それらにデータが含まれているかどうかを確認するのに忙しいためです。これを、個々の行を削除するのではなく、テーブルでTRUNCATEを使用した場合に発生することと比較する必要があります。TRUNCATEは、テーブルのHWMを「ゼロ」にリセットし、テーブル上の関連するインデックスも切り捨てます。テーブル内のすべての行を削除する予定の場合は、この理由から、使用できる場合はTRUNCATE¿が最適な方法になります。

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:492636200346818072

それが役に立てば幸い...

于 2012-04-18T06:19:24.513 に答える
1
  1. 正しい
  2. トリガーは起動しません。DDL ステートメントで DML トリガーが起動されないことは正しいです。

詳細: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands

于 2012-04-18T06:07:31.440 に答える