DMLとDDLの区別は、その名前が示すほど明確ではないため、状況が少し濁ることがあります。
Oracle は、 『コンセプトガイド』ではDDLとして明確に分類しTRUNCATE
てDELETE
いますが、DMLとして分類しています。
TRUNCATE
私が理解しているように、OracleのDDLキャンプの主なポイントは次のとおりです。
TRUNCATE
ストレージパラメータ(NEXT
パラメータ)を変更できます。これらはオブジェクト定義の一部であり、DDLキャンプにあります。
TRUNCATE
暗黙的commit
であり、ロールバック(フラッシュバックは別として)できません-Oracleのほとんど(すべて?)DDL操作はこれを行いますが、DMLは行いません。
トリガーをTRUNCATE
実行しないという事実ON DELETE
は、通常のDML操作とは異なります(ただし、一部の直接パスDML操作もトリガーをスキップするため、明確な指標ではありません)。
DELETE
UNDO を生成するのと同じドキュメントノートは生成しますが、生成TRUNCATE
しないので、この点でステートメントは正しいです。(ただし、復元/回復の場合に切り捨てを再生できるようにTRUNCATE
いくつかを生成することに注意してくださいREDO
。)しかし、一部のNOLOGGING
操作では、UNDOが減少することもあります(まったくわかりません)。
だから私はそれを次のように要約します:
truncate
コミットしてロールバックできないという意味で「トランザクション」ではなく、オブジェクトストレージ属性を変更できます。したがって、通常のDMLではありません-OracleはそれをDDLとして分類します。
delete
通常のDMLステートメントです。