레코드란?
레코드는 자료형이 각기 다른 데이터를 하나의 변수에 저장하는 데 사용한다.
레코드 기본 형식
TYPE 레코드이름 IS RECORD (
변수 이름 자료형 NOT NULL := (또는 DEFAULT) 값 또는 값이 도출되는 표현식
정의한 레코드는 지금까지 다른 변수처럼 기존 자료형처럼 사용할 수 있다. 레코드에 포함된 변수는 레코드 이름과 마침표로 사용할 수 있다.
레코드를 사용한 INSERT
PL/SQL문에서는 테이블에 데이터를 삽입하거나 수정하는 INSERT, UPDATE문에도 레코드를 사용할 수 있다. INSERT문에 레코드를 사용하면 VALUES절에 레코드 이름만 명시해도 된다. 그리고 선언한 레코드와 INSERT 대상이 되는 테이블의 데이터 개수, 자료형, 순서를 맞춰야 한다는 것도 기억해 두자.
DECLARE
TYPE REC_DEPT IS RECORD(
deptno NUMBER(2) NOT NULL := 99,
dname DEPT.DNAME%TYPE,
loc DEPT.LOC%TYPE );
dept_rec REC_DEPT;
BEGIN
dept_rec.deptno := 99;
dept_rec.dname := 'DATABASE' ;
dept_rec.loc := 'SEOUL' ;
INSERT INTO DEPT_RECORD
VALUES dept_rec;
END;
/
레코드를 사용한 UPDATE
레코드는 UPDATE문에도 사용할 수 있다. 이 경우에 SET절은 ROW 키워드와 함께 레코드 이름을 명시한다. 기본 UPDATE문에서는 SET절을 통해 변경할 열을 하나하나 지정한 것과 달리 레코드에 저장된 데이터를 사용하여 행 전체의 데이터를 바꿔 준다.
DECLARE
TYPE REC_DEPT IS RECORD(
deptno NUMBER(2) NOT NULL := 99;
dname DEPT.DNAME%TYPE,
loc DEPT.LOC%TYPE );
dept_rec REC_DEPT;
BEGIN
dept_rec.deptno := 50;
dept_rec.dname := 'DB';
dept_rec.loc := 'SEOUL' ;
UPDATE DEPT_RECORD
SET ROW = dept_rec
WHERE DEPTNO = 99;
END;
/
레코드를 포함하는 레코드
레코드에 포함된 변수의 자료형을 지정할 때 다른 레코드를 지정할 수도 있다. 변수에 레코드형을 적용하면 두개의 마침표로 값을 사용한다. 이렇게 레코드 안에 또 다른 레코드를 포함한 형태를 중첩레코드라고 한다.
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_rec REC_EMP;
BEGIN
SELECT E.EMPNO, E.ENAME, D.DEPTNO, D.DNAME, D.LOC
INTO emp_rec.empno, emp_rec.ename, emp_rec.dinfo.deptno,
emp_rec.dinfo.dname, emp_rec.dinfo.loc FROM emp E
INNER JOIN dept D ON E.deptno = D.deptno
WHERE E.EMPNO = 7788;
DBMS_OUTPUT.PUT_LINE( ' EMPNO : ' || emp_rec.emptno);
DBMS_OUTPUT.PUT_LINE( ' ENAME : ' || emp_rec.ename);
DBMS_OUTPUT.PUT_LINE( ' DEPTNO : ' || emp_rec.dinfo.deptno);
DBMS_OUTPUT.PUT_LINE( ' DNAME : ' || emp_rec.dinfo.dname);
DBMS_OUTPUT.PUT_LINE( ' LOC : ' || emp_rec.dinfo.loc);
END;
/
'DATABASE > RECORD_COLLECTION' 카테고리의 다른 글
02. 자료형이 같은 여러 데이터를 저장하는 컬렉션 (0) | 2024.04.08 |
---|