본문 바로가기
카테고리 없음

PL/SQL 레코드 (Record) 사용법 및 예제

by 반월하 2024. 6. 25.
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

댓글