① DELETE 메소드

    DELETE는 컬렉션의 요소를 삭제하는 빌트인 프로시저로 삭제할 요소의 인덱스를 매개변수로 받는다. 매개변수를 생략하면 요소 전체를 삭제하며, (from, to)형태로 2개의 매개변수를 넘기면 그 범위안에 속한 모든 요소를 삭제한다. 하지만 이 함수는 컬렉션 타입에 따라 동작하는 방식에 약간 차이가 있는데 이를 표로 정리하면 다음과 같다.

    표 11-3 컬렉션 DELETE 메소드 사용법
    사용법 설명 연관 배열 VARRAY 중첩 테이블
    컬렉션.DELETE 모든 요소 삭제 O O O
    컬렉션.DELETE(3) 인덱스가 3인 요소 삭제 O X O
    컬렉션.DELETE(3,5) 인덱스가 3, 4, 5인 요소 삭제 O X O

    [표 11-3]을 보면 알겠지만 VARRAY는 매개변수를 넘기는 형태로는 DELETE 메소드를 사용할 수 없고 개별 요소가 아닌 요소 전체만 삭제할 수 있다. 그 이유는 VARRAY는 전체 크기를 기준으로 순서대로 요소가 채워지며 이가 빠진 것처럼 중간에 있는 요소가 빠질 수 없는 VARRAY만의 특징 때문이다. 그리고 연관 배열에서는 문자형 인덱스를 사용할 수 있으므로 DELETE 메소드의 매개변수로 문자형 인덱스를 넘겨 요소를 삭제할 수 있다.

    입력

        DECLARE
          -- 숫자-문자 쌍의 연관 배열 선언
          TYPE av_type IS TABLE OF VARCHAR2(40)
                          INDEX BY VARCHAR2(10);
    
          -- 연관배열 변수 선언
          vav_test av_type;
    
          vn_cnt number := 0;
        BEGIN
          -- 연관 배열 변수 선언
          vav_test('A') := '10에 대한 값';
          vav_test('B') := '20에 대한 값';
          vav_test('C') := '20에 대한 값';
    
          vn_cnt := vav_test.COUNT;
          DBMS_OUTPUT.PUT_LINE('삭제 전 요소 개수: ' || vn_cnt);
          -- DELETE 메소드를 사용해 두 개의 요소를 삭제
          vav_test.DELETE('A', 'B');
    
          -- COUNT 메소드를 사용해 연관 배열에 있는 요소 개수를 가져 옴
          vn_cnt := vav_test.COUNT;
          DBMS_OUTPUT.PUT_LINE('삭제 후 요소 개수: ' || vn_cnt);
        END;
    

    결과

        삭제 전 요소 개수: 3
        삭제 후 요소 개수: 1
    
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.