더북(TheBook)

① 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
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.