① DELETE 메소드
DELETE는 컬렉션의 요소를 삭제하는 빌트인 프로시저로 삭제할 요소의 인덱스를 매개변수로 받는다. 매개변수를 생략하면 요소 전체를 삭제하며, (from, to)형태로 2개의 매개변수를 넘기면 그 범위안에 속한 모든 요소를 삭제한다. 하지만 이 함수는 컬렉션 타입에 따라 동작하는 방식에 약간 차이가 있는데 이를 표로 정리하면 다음과 같다.
사용법 | 설명 | 연관 배열 | 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