④ 테이블 컬럼 타입으로 VARRAY 사용하기

    사용자 정의 타입으로 VARRAY를 만들어 테이블의 컬럼 타입으로 사용해 보자. 전 세계 대륙에 있는 국가명을 담을 테이블을 만들어 볼 텐데, 한 대륙에는 여러 국가가 있으므로 국가 이름 컬럼을 VARRAY 타입으로 생성할 것이다. 먼저 사용자 정의 타입을 만들어 보자.

    입력

        -- 국가 이름을 가지고 있는 VARRAY 타입 생성.
        CREATE OR REPLACE TYPE country_var IS VARRAY(7) OF VARCHAR2(30);
    
        -- 대륙별 국가 리스트를 담을 테이블 생성
        CREATE TABLE ch11_continent (
                 continent   VARCHAR2(50),   -- 대륙명
                 country_nm  country_var     -- 국가명을 넣을 VARRAY 타입 컬럼
                    );
    

    결과

        TYPE COUNTRY_VAR이(가) 컴파일되었습니다.
        table CH11_CONTINENT이(가) 생성되었습니다.
    

    이제 대륙별 국가 명칭을 입력해 보자.

    입력

        DECLARE
    
        BEGIN
          -- 생성자를 사용해 국가명을 입력한다.
          INSERT INTO ch11_continent
          VALUES('아시아', country_var('한국','중국','일본'));
    
          INSERT INTO ch11_continent
          VALUES('북아메리카', country_var('미국','캐나다','멕시코'));
    
          INSERT INTO ch11_continent
          VALUES('유럽', country_var('영국','프랑스','독일', '스위스'));
    
          COMMIT;
    
        END;
    

    결과

        익명 블록이 완료되었습니다.
    

    ch11_continent 테이블에 유럽에 있는 4개의 국가를 입력했다. 이제 country_var 타입 변수를 생성해 유럽의 다른 국가를 집어 넣은 뒤, 위에서 입력한 국가를 통째로 변경해 보자.

    입력

        DECLARE
          -- 새로운 국가 세팅
          new_country country_var := country_var('이태리', '스페인', '네델란드', '체코', '포르투칼');
    
          country_list country_var;
        BEGIN
          -- 새로운 국가로 update
          UPDATE ch11_continent
             SET country_nm = new_country
           WHERE continent = '유럽';
    
          COMMIT;
    
          -- UPDATE 됐는지 확인을 위해 국가명 컬럼을 VARRAY 변수에 받아 옴
          SELECT country_nm
            INTO country_list
            FROM ch11_continent
           WHERE continent = '유럽';
    
          -- 루프를 돌며 국가를 출력
          FOR i IN country_list.FIRST .. country_list.LAST
          LOOP
            DBMS_OUTPUT.PUT_LINE('유럽국가명 = ' || country_list(i));
          END LOOP;
        END;
    

    결과

        유럽국가명 = 이탈리아
        유럽국가명 = 스페인
        유럽국가명 = 네델란드
        유럽국가명 = 체코
        유럽국가명 = 포르투칼
    

    기존에 유럽에는 영국, 프랑스 등 4개국이 있었는데, 새로운 국가를 new_country란 VARRAY 변수에 할당한 뒤 UPDATE문을 통해 ch11_continent 테이블의 국가명(country_nm) 컬럼을 갱신했다. 국가명 컬럼 자체가 컬렉션 타입이므로 유럽의 경우 애초에는 4개 국가가 있었지만 UPDATE문을 수행한 뒤에는 신규 5개 국가명으로 갱신되었다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.