Відмінність DML від DDL не настільки чітка, як випливають з їхніх назв, тому інколи стає дещо каламутним.
Oracle чітко класифікується TRUNCATEяк DDL в Посібнику з концепцій, але DELETEяк DML.
Основні моменти, які ставляться TRUNCATEв таборі DDL на Oracle, наскільки я розумію, це:
TRUNCATEможуть змінювати параметри зберігання ( NEXTпараметр), і вони є частиною визначення об'єкта - це в таборі DDL.
TRUNCATEробить неявне commit, і його не можна повернути назад (відступ убік) - більшість (усіх?) операцій DDL в Oracle роблять це, жоден DML не робить.
Те, що TRUNCATEне запускає ON DELETEтригери, також відрізняє його від звичайних операцій DML (але деякі операції з DML прямого шляху також пропускають тригери, тому це не ясний показник).
Ця ж документація зазначає, що DELETEстворює UNDO, але TRUNCATEні, тому ваше твердження є правильним у цьому відношенні. (Зверніть увагу, що TRUNCATEвони генерують деякі, REDOщоб усічення можна було відтворити у разі відновлення / відновлення.) Але деякі NOLOGGINGоперації також можуть призвести до зменшення UNDO (не впевнений у жодному взагалі), тож це, на мій погляд, не є чітким показником.
Тож я б підсумував це як:
truncateне є "трансакційним" в тому сенсі, що він здійснює і не може бути відкатований назад, і може змінювати атрибути зберігання об'єктів. Тож це не звичайний DML - Oracle класифікує його як DDL.
delete - звичайний оператор DML.