728x90
PL/SQL 레코드 (Record) 사용법 및 예제
PL/SQL에서 레코드는 자료형이 다른 여러 데이터를 하나의 변수에 저장하는 데 사용됩니다. 이는 C, C++, Java 같은 프로그래밍 언어의 구조체(Structure)나 클래스(Class) 개념과 유사합니다. 이번 포스팅에서는 PL/SQL에서 레코드를 정의하고 사용하는 방법에 대해 알아보겠습니다.
레코드란?
레코드(record)는 서로 다른 자료형의 데이터를 하나의 변수에 저장할 수 있는 구조입니다.
TYPE 레코드 이름 IS RECORD(
변수 이름 자료형 NOT NULL := (또는 DEFAULT) 값 또는 값이 도출되는 여러 표현식
);
레코드는 기존 자료형처럼 사용할 수 있으며, 레코드에 포함된 변수는 레코드이름.변수이름
형태로 접근합니다.
레코드 정의 및 사용 예제
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';
DBMS_OUTPUT.PUT_LINE('DEPTNO : ' || dept_rec.deptno);
DBMS_OUTPUT.PUT_LINE('DNAME : ' || dept_rec.dname);
DBMS_OUTPUT.PUT_LINE('LOC : ' || dept_rec.loc);
END;
/
이 예제에서는 REC_DEPT
라는 레코드를 정의하고, 이를 사용하여 변수 dept_rec
에 값을 할당하고 출력합니다.
레코드를 사용한 INSERT
레코드를 사용하여 테이블에 데이터를 삽입할 수 있습니다. 이 경우, 선언한 레코드와 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
레코드를 사용하여 테이블의 데이터를 업데이트할 수 있습니다. SET
절에 ROW
키워드와 레코드 이름을 사용합니다.
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;
/
중첩 레코드 (Nested Record)
레코드 안에 또 다른 레코드를 포함한 형태로, 이를 중첩 레코드라고 합니다.
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, DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND E.EMPNO = 7788;
DBMS_OUTPUT.PUT_LINE('EMPNO : ' || emp_rec.empno);
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;
/
이 예제에서는 REC_EMP
레코드가 dinfo
변수에 REC_DEPT
레코드를 포함하고 있습니다. 이는 두 개의 마침표를 사용하여 값을 접근할 수 있습니다.
마무리
PL/SQL에서 레코드를 사용하는 방법을 통해 복잡한 데이터를 효율적으로 관리할 수 있습니다. 이 포스팅이 여러분의 PL/SQL 학습에 도움이 되길 바랍니다. 질문이 있거나 추가적인 정보가 필요하면 댓글로 남겨주세요!
태그
- PL/SQL
- 레코드
- 데이터베이스
- 프로그래밍
- Oracle
728x90
댓글