레코드와 컬렉션
TYPE 레코드 이름 IS RECORD(
변수 이름 자료형 NOT NULL := (또는 DEFAULT) 값 또는 값이 도출되는 여러 표현식
);
참고)
1) DEPT_RECORD 테이블 생성하기
CREATE TABLE DEPT_RECORD AS SELECT * FROM DEPT;
2) 레코드를 사용하여 INSERT 하기
INSERT INTO DEPT_RECORD VALUES DEPT_DATA;
UPDATE DEPT_RECORD
SET ROW = DEPT_DATA
WHERE DEPTNO = 99;
1) 레코드에 포함된 변수의 자료형을 지정할 때 다른 레코드를 지정가능
2) 레코드에 다른 레코드 포함하기
참고)
단일 조회값 -> 변수에 넣는 방법
SELECT 필드명, ...INTO 변수, ...FROM ... WHERE ...
DECLARE
TYPE REC_DEPT IS RECORD(
DEPTNO DEPT.DEPTNO%TYPE,
DNAME DEPT.DNAME%TYPE,
LOC DEPT.LOC%TYPE
);
TYPE REC_EMP IS RECORD (
EMPNO EMP.EMPNO%TYPE,
ENAME EMP.ENAME%TYPE,
DINFO REC_DEPT
);
EMP_DATA REC_EMP;
BEGIN
SELECT E.EMPNO, E.ENAME, D.DEPTNO, D.DNAME, D.LOC
INTO
EMP_DATA.EMPNO,
EMP_DATA.ENAME,
EMP_DATA.DINFO.DEPTNO,
EMP_DATA.DINFO.DNAME,
EMP_DATA.DINFO.LOC
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO AND E.ENAME = 'SCOTT';
DBMS_OUTPUT.PUT_LINE('EMPNO : ' || EMP_DATA.EMPNO);
DBMS_OUTPUT.PUT_LINE('ENAME : ' || EMP_DATA.ENAME);
DBMS_OUTPUT.PUT_LINE('DEPTNO : ' || EMP_DATA.DINFO.DEPTNO);
DBMS_OUTPUT.PUT_LINE('DNAME : ' || EMP_DATA.DINFO.DNAME);
DBMS_OUTPUT.PUT_LINE('LOC : ' || EMP_DATA.DINFO.LOC);
END;
자료형이 같은 여러 데이터를 저장하는 컬렉션
1) 인덱스라고 불리는 키(key), 값(value)으로 구성되는 컬렉션
2) 중복되지 않은 유일한 키를 통해 값을 저장하고 불러오는 방식을 사용
3) 형식
TYPE 연관 배열 이름 IS TABLE OF 자료형 [NOT NULL]
INDEX BY 인덱스형;
4) 연관 배열 사용하기
5) 연관 배열 자료형에 레코드 사용하기
DECLARE
TYPE REC_DEPT IS RECORD(
DEPTNO DEPT.DEPTNO%TYPE,
DNAME DEPT.DNAME%TYPE
);
TYPE TYPE_DEPT IS TABLE OF REC_DEPT
INDEX BY PLS_INTEGER;
DEPT_ARR TYPE_DEPT;
IDX PLS_INTEGER := 1;
BEGIN
FOR d IN (SELECT DEPTNO, DNAME FROM DEPT) LOOP
DEPT_ARR(IDX).DEPTNO := d.DEPTNO;
DEPT_ARR(IDX).DNAME := d.DNAME;
DBMS_OUTPUT.PUT_LINE(DEPT_ARR(IDX).DEPTNO ||
' : ' || DEPT_ARR(IDX).DNAME);
IDX := IDX + 1;
END LOOP;
END;