④ 테이블 컬럼 타입으로 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개 국가명으로 갱신되었다.