TRUNCATE명령문

TRUNCATE문은 테이블에서 모든 행을 삭제합니다.

호출

이 명령문은 애플리케이션 프로그램에 임베드되거나 동적 SQL문을 사용하여 실행할 수 있습니다. 이는 DYNAMICRULES 실행 동작이 패키지에 영향을 주는 경우에만 동적으로 준비될 수 있는 실행문입니다(SQLSTATE 42509).

권한 부여

명령문의 권한 부여 ID에서 보유한 특권은 테이블에 대한 다음 권한 중 최소 하나를 포함하고 테이블 계층의 모든 하위 테이블을 포함해야 합니다.
  • 자르려는 테이블의 DELETE 특권
  • 테이블이 포함된 스키마에 대한 DELETEIN 특권
  • 자르려는 테이블의 CONTROL 특권
  • 테이블이 포함된 스키마에 대한 DATAACCESS 권한
  • DATAACCESS 권한
테이블에서 정의되는 DELETE 트리거를 무시하려면, 명령문의 권한 부여 ID에서 보유한 특권에 테이블에 대한 다음 권한 부여 중 최소 하나를 포함해야 하고 테이블 계층의 모든 하위 테이블이 포함되어야 합니다.
  • 테이블에 대해 ALTER 특권
  • 테이블 및 테이블 계층의 모든 서브테이블이 포함된 스키마에 대한 ALTERIN 특권
  • 테이블에 대해 CONTROL 특권
  • 테이블 및 테이블 계층의 모든 서브테이블이 포함된 스키마에 대한 SCHEMAADM 권한
  • DBADM 권한
보안 정책에서 보호하는 테이블을 자르려면, 명령문의 권한 부여 ID가 보유하는 특권에 다음 권한 중 최소 하나가 포함되어야 합니다.
  • 테이블에 대해 CONTROL 특권
  • DBADM 권한
행 액세스 제어를 활성화시키는 테이블을 자르려면 명령문의 권한 부여 ID에 다음 권한 중 최소 하나가 포함되어야 합니다.
  • 테이블에 대해 CONTROL 특권
  • DBADM 권한

구문

Read syntax diagramSkip visual syntax diagram TRUNCATE TABLE table-name DROP STORAGEREUSE STORAGE IGNORE DELETE TRIGGERSRESTRICT WHEN DELETE TRIGGERS CONTINUE IDENTITY IMMEDIATE1
Notes:
  • 1 IMMEDIATE is optional only for column-organized tables.

설명

table-name
자르려는 테이블을 식별합니다. 이름은 현재 서버에 존재하는 테이블(SQLSTATE 42704)을 식별해야 하지만, 이는 카탈로그 테이블(SQLSTATE 42832), 별칭(SQLSTATE 42809), 뷰, 서브테이블, 스테이징 테이블, 시스템 유지보수 구체화된 쿼리 테이블, 시스템 기간 시간 테이블(SQLSTATE 428HZ) 또는 RCT(range-clustered table)(SQLSTATE 42807)가 될 수 없습니다.

table-name이 테이블 계층의 루트 테이블인 경우, 테이블 계층의 모든 테이블이 잘립니다.

DROP STORAGE 또는 REUSE STORAGE
테이블에 할당되는 기존 스토리지를 삭제하거나 재사용할지 여부를 지정합니다. 기본값은 DROP STORAGE입니다.
DROP STORAGE
테이블에 할당된 모든 스토리지가 릴리스되고 사용 가능하게 됩니다. 이 옵션이 지정되면(내재적으로 또는 명시적으로) 온라인 백업이 차단됩니다.
REUSE STORAGE
테이블에 할당된 모든 스토리지가 테이블에 계속 할당되지만, 스토리지가 비어 있는 것으로 간주됩니다. 이 옵션은 DMS 테이블스페이스의 테이블에만 적용 가능하고 그 외에는 무시됩니다.
IGNORE DELETE TRIGGERS 또는 RESTRICT WHEN DELETE TRIGGERS
삭제 트리거가 테이블에 정의될 때 수행하는 것을 지정합니다. 기본값은 IGNORE DELETE TRIGGERS입니다.
IGNORE DELETE TRIGGERS
테이블에 정의되는 삭제 트리거는 자르기 조작을 통해 활성화되지 않습니다.
RESTRICT WHEN DELETE TRIGGERS
삭제 트리거가 테이블에 정의되는 경우 오류가 리턴됩니다(SQLSTATE 428GJ).
CONTINUE IDENTITY
ID 컬럼이 테이블에 존재하는 경우, 생성된 다음 ID 컬럼 값이 TRUNCATE문이 실행되지 않는 경우 생성되는 다음 값으로 계속됩니다.
IMMEDIATE
자르기 조작이 즉시 처리되고 미완료될 수 없다는 것을 지정합니다. 명령문은 트랜잭션에 있는 첫 번째 명령문이어야 합니다(SQLSTATE 25001).

잘린 테이블은 동일한 작업 단위(UOW)에서 즉시 사용 가능합니다. ROLLBACK문이 TRUNCATE문 이후에 실행될 수 있지만, 자르기 조작이 수행되지 않고 테이블이 잘려진 상태가 됩니다. 예를 들어, 다른 데이터 변경 조작이 TRUNCATE IMMEDIATE문 및 ROLLBACK문이 실행된 이후 테이블에서 수행되는 경우, 자르기 조작은 미완료되지 않지만, 다른 모든 데이터 변경 조작은 미완료됩니다.

IMMEDIATE절은 컬럼으로 구성된 테이블의 경우에만 제외할 수 있습니다.
컬럼으로 구성된 테이블에 IMMEDIATE가 지정되지 않은 경우 TRUNCATE문은 작업 단위의 첫 번째 명령문이 될 필요가 없으며 ROLLBACK문을 사용하여 자르기 조작을 실행 취소할 수 있습니다.
주의: IMMEDIATE 절은 다음에서만 선택 사항입니다 Db2 버전 11.5 모드 팩 2 이상 버전에서만 선택 사항입니다.

규칙

  • 참조 무결성: 테이블 및 테이블 계층의 모든 테이블이 강제 실행된 참조 제한조건에서 상위 테이블이 되지 않아야 합니다(SQLSTATE 428GJ). 자체 참조 RI 제한조건이 허용됩니다.
  • 파티션된 테이블: 테이블은 데이터 파티션을 참조하도록 변경되는 것으로 인해 설정 무결성 보류 상태가 아니어야 합니다(SQLSTATE 55019). TRUNCATE문을 실행하기 전에 테이블이 무결성에 대해 검사되어야 합니다. 테이블에는 논리적으로 분리된 파티션이 없어야 합니다(SQLSTATE 55057). TRUNCATE문을 실행하기 전에 비동기 파티션 분리 태스크가 완료되어야 합니다.
  • 배타적 액세스: 세션에만 테이블에 대한 커서 열기 또는 테이블에 보유된 잠금이 있을 수 있습니다(SQLSTATE 25001).
  • WITH HOLD 커서: 현재 세션에는 테이블에 대한 WITH HOLD 커서 열기가 있을 수 없습니다(SQLSTATE 25001).

참고

  • 테이블 통계: 테이블에 대한 통계는 TRUNCATE문에 의해 변경되지 않습니다.
  • 삭제된 행 수: SQLCA의 SQLERRD(3)는 자르기 조작에 대해 -1로 설정됩니다. 테이블에서 삭제된 행 수가 리턴되지 않습니다.
  • 컬럼으로 구성된 테이블에서 IMMEDIATE절이 선택사항인 경우 IMMEDIATE절에 다음 규칙이 적용됩니다.
    • IMMEDIATE 옵션을 지정하지 않으면 TRUNCATE문이 처리되고 실행 취소될 수 있습니다.
    • TRUNCATE문을 트랜잭션 범위 내 어느 곳에서나 사용할 수 있습니다.
    • 트랜재션이 완료되기 전에 TRUNCATE문을 실행 취소할 수 있습니다.
    • 잘린 테이블을 동일한 작업 단위(UOW)에서 즉시 사용할 수 있습니다.
    • IMMEDIATE 옵션 없이 TRUNCATE문이 처리된 후에 ROLLBACK문을 실행할 수 있습니다. 그러면 TRUNCATE 조작이 실행 취소됩니다.
    • 예를 들어 IMMEDIATE 옵션 없이 TRUNCATE문이 처리된 후에 다른 데이터 변경 조작이 수행된 다음 ROLLBACK문이 실행된 경우에도 TRUNCATE 조작이 실행 취소됩니다.
    • 트랜잭션이 완료되면 스토리지가 자동으로 비동기적으로 재확보됩니다.
    • 자르기 조작은 대량 삭제 조작과 유사한 방법으로 수행됩니다. 테이블에서 삭제된 행 수가 SQLERRD(4)에 리턴됩니다.
    • 기본 DELETE문이 WHERE절을 포함하지 않으므로 SQLWARN(5) 값은 ‘W’입니다.

예:

  • 예제 1: 기존 트리거와 상관 없이 사용되지 않는 인벤토리 테이블을 비우고 할당된 공간을 리턴하십시오.
       TRUNCATE TABLE INVENTORY
         IGNORE DELETE TRIGGERS
         DROP STORAGE
         IMMEDIATE
  • 예제 2: 기존 삭제 트리거와 상관 없이 사용되지 않는 인벤토리 테이블을 비우지만 나중에 재사용하기 위해 할당된 공간을 유지하십시오.
       TRUNCATE TABLE INVENTORY
          REUSE STORAGE
          IGNORE DELETE TRIGGERS
          IMMEDIATE
  • 예제 3: 컬럼으로 구성된 테이블에 IMMEDIATE가 지정되지 않은 경우 TRUNCATE문은 작업 단위의 첫 번째 명령문이 될 필요가 없으며 ROLLBACK문을 사용하여 자르기 조작을 실행 취소할 수 있습니다.
    SELECT COUNT(*) FROM TAB10;
    TRUNCATE TABLE TAB10;
    SELECT COUNT(*) FROM TAB10;
    ROLLBACK;
    IMMEDIATE 옵션이 없는 자르기 명령문이 작업 단위의 첫 번째 명령문이 아니고 IMMEDIATE 옵션이 없는 자르기 명령문을 롤백할 수 있음을 참고하십시오.