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ırTRUNCATEDELETE .
TRUNCATEAnladığım kadarıyla, Oracle'daki DDL kampına katılan ana noktalar şunlardır:
TRUNCATEdepolama parametrelerini ( NEXTparametre) değiştirebilir ve bunlar nesne tanımının bir parçasıdır - bu DDL kampındadır.
TRUNCATEörtük yapar commitve 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 DELETEde 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 DELETEUNDO'yu oluşturan fakat TRUNCATEyapmayan notları da içerir , bu nedenle ifadeniz bu açıdan doğrudur. ( Geri yükleme / kurtarma durumunda kesmenin yeniden oynatılabilmesi için TRUNCATEbazılarını ürettiğini unutmayın REDO.) Ancak bazı NOLOGGINGiş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:
truncatetaahhü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.