DML과 DDL의 구별은 이름에서 알 수 있듯이 명확하지 않으므로 상황이 때때로 더러워집니다.
Oracle 은 Concepts Guide에서 DDL 로, DML 로 명확하게 분류TRUNCATEDELETE 합니다.
TRUNCATE내가 알기로 Oracle의 DDL 캠프에 넣은 주요 요점 은 다음과 같습니다.
TRUNCATE스토리지 매개 변수 ( NEXT매개 변수)를 변경할 수 있으며, 이는 DDL 캠프에있는 개체 정의의 일부입니다.
TRUNCATE암시 적 commit이며 롤백 (플래시 백 제외)-Oracle의 대부분 (모두?) DDL 작업은이를 수행하며 DML은 수행하지 않습니다.
트리거를 TRUNCATE실행하지 않는다는 사실 ON DELETE은 일반적인 DML 작업과 차별화됩니다 (그러나 일부 직접 경로 DML 작업도 트리거를 건너 뛰므로 명확한 지표는 아닙니다).
DELETEUNDO 를 생성하지만 TRUNCATE그렇지 않은 동일한 문서 참고 사항이 있으므로 귀하의 진술은이 점에서 정확합니다. ( 복원 / 복구의 경우 잘림을 재생할 수 있도록 TRUNCATE일부를 생성합니다 REDO.) 그러나 일부 NOLOGGING작업은 UNDO가 감소 할 수 있으므로 (아무도 확실하지 않음) 내 의견으로는 분명한 지표가 아닙니다.
따라서 다음과 같이 요약합니다.
truncate커밋하고 롤백 할 수 없다는 의미에서 "트랜잭션"이 아니며 오브젝트 스토리지 속성을 수정할 수 있습니다. 따라서 일반적인 DML이 아닙니다. Oracle은이를 DDL로 분류합니다.
delete 일반적인 DML 문입니다.