RDBMS/Oracle
[PL/SQL] 복합형(레코드/컬렉션)
워터파슬리
2023. 4. 21. 16:11
728x90
반응형
3. 복합형
- 여러 종류 및 개수의 데이터를 저장하기 위해 사용자가 직접 정의하는 자료형
- 레코드: 다양한 자료형을 가진 데이터들을 한 번에 저장(테이블의 행과 유사)
- 컬렉션: 동일한 자료형을 가진 데이터를 여러 개 저장(테이블의 열과 유사, like 배열)
레코드
DECLARE
TYPE rec_emp IS RECORD(
name VARCHAR2(200)
,salary emp%TYPE
,dept_code emp%TYPE
)
BEGIN
rec_emp.name := ‘이동욱‘;
rec_emp.salary := 3000000;
rec_emp.dept_code := ‘10000678’;
—-레코드를 사용한 INSERT
INSERT INTO emp
VALUES rec_emp;
rec_emp.salary := 5500000;
rec_emp.dept_code := ‘10000999’;
—-레코드를 사용한 UPDATE
UPDATE emp
SET ROW = rec_emp
WHERE name = ‘이동욱’
;
END
;
컬렉션
- 특정 자료형의 데이터를 여러 개 저장하는 복합 자려향
- 종류: *연관 배열, 중첩 테이블, VARRAY
*연관 배열
TYPE 연관배열명 IS TABLE OF 연관배열자료형[NOT NULL] —참조 자료형 사용 가능
INDEX BY 인덱스자료형;
- 인덱스(key)와 값(value)으로 구성되는 컬렉션
- 중복되지 않은 유일한 키를 통해 값을 저장하고 불러오는 방식
- 인덱스는 1부터 시작
- 사용 빈도가 제일 높은 컬렉션
DECLARE
idx NUMBER(10) := 0;
TYPE itab_lang IS TABLE OF VARCHAR2(200)
INDEX BY PLS_INTEGER;
arr_lang itab_lang;
—-참조 자료형 연관 배열 생성
TYPE itab_emp IS TABLE OF emp%ROWTYPE
INDEX BY PLS_INTEGER;
arr_emp itab_emp;
BEGIN
arr_lang(1) := ‘java’;
arr_lang(2) := ‘javaScript’;
arr_lang(3) := ‘sql’;
arr_lang(4) := ‘python’;
—-LOOP문으로 arr_lang 출력
LOOP
idx := idx + 1;
IF idx > arr_lang.COUNT THEN EXIT;
END IF;
dbms_output.put_line(arr_lang(idx));
END LOOP;
—-FOR LOOP문으로 arr_lang 출력
FOR i IN arr_lang.FIRST..arr_lang.LAST LOOP
dbms_output.put_line(arr_lang(i));
END LOOP;
idx := 0;
—-FOR LOOP 응용
FOR i IN (SELECT * FROM emp) LOOP
idx := idx + 1;
arr_emp(idx) := i;
—-emp 테이블 전체 직원명 출력
dbms_output.put_line(arr_emp(idx).name);
END LOOP;
—-컬렉션을 사용한 INSERT
INSERT INTO emp2
VALUES arr_emp(idx)
;
END
;
728x90
반응형