DDL'ye karşı DDL ayrımının isimleri ima ettiği kadar net değil, bu yüzden bazen işler biraz çamurlu oluyor.
Oracle , Kavramlar Kılavuzu'nda açıkça DDL , ancak DML olarak sınıflandırırTRUNCATE
DELETE
.
TRUNCATE
Anladığım kadarıyla, Oracle'daki DDL kampına katılan ana noktalar şunlardır:
TRUNCATE
depolama parametrelerini ( NEXT
parametre) değiştirebilir ve bunlar nesne tanımının bir parçasıdır - bu DDL kampındadır.
TRUNCATE
örtük yapar commit
ve geri alınamaz (flashback kenara) - Oracle'daki çoğu (tümü?) DDL işlemleri bunu yapar, hiçbir DML yapmaz.
Tetikleyicilerin TRUNCATE
çalışmadığı gerçeği ON DELETE
de normal DML işlemlerinden ayırır (ancak bazı doğrudan yol DML işlemleri de tetikleyicileri atlar, bu nedenle bu açık bir gösterge değildir).
Aynı dokümantasyon DELETE
UNDO'yu oluşturan fakat TRUNCATE
yapmayan notları da içerir , bu nedenle ifadeniz bu açıdan doğrudur. ( Geri yükleme / kurtarma durumunda kesmenin yeniden oynatılabilmesi için TRUNCATE
bazılarını ürettiğini unutmayın REDO
.) Ancak bazı NOLOGGING
işlemler de azaltılmış UNDO üretebilir (hiçbirinden emin değilim), bu da bence net bir gösterge değil.
Bu yüzden şöyle özetleyeceğim:
truncate
taahhüt ettiği ve geri alınamayacağı ve nesne depolama özniteliklerini değiştirebileceği anlamında "işlemsel" değildir. Bu yüzden sıradan bir DML değil - Oracle onu DDL olarak sınıflandırır.
delete
sıradan bir DML ifadesidir.