SQL

[PL/SQL] RECORD

seonzone 2021. 8. 6. 18:07

RECORD

레코드란 PL/SQL에서 제공하는 테이블 형태의 데이터 타입이다. 레코드와 기존의 프로시저의 차이점이라면 기존의 프로시저문 같은 경우 하나의 변수만 가질 수 있었지만, 레코드 같은 경우 여러 개의 값을 가질 수 있다.

레코드를 정의하는 방식

TYPE [레코드명] IS RECORD( 
 변수1 
 변수2
 변수3 ... 
 );
 [레코드변수명] [레코드명];

 

 

예제 테이블

CREATE OR REPLACE PROCEDURE RECORD_STUD(P_STUDNO IN STUDENT.STUDNO%TYPE)
IS
   TYPE STYPE IS RECORD(
   V_STUDNO NUMBER(10),V_NAME VARCHAR2(10),V_HEIGHT NUMBER(5));
   STREC STYPE;
BEGIN
  SELECT STUDNO,NAME,HEIGHT
  INTO
   STREC.V_STUDNO,STREC.V_NAME,STREC.V_HEIGHT
  FROM STUDENT
  WHERE STUDNO=P_STUDNO;
  DBMS_OUTPUT.put_line('학번:'|| STREC.V_STUDNO||' 이름:'|| STREC.V_NAME||' 키:'||STREC.V_HEIGHT);
END RECORD_STUD;
  • TYPE STYPE IS RECORD(
    V_STUDNO NUMBER(10) ..... : 3개의 변수를 생성해주고 레코드 변수명을 STREC로 지정해준다.

 

  • INTO
    STREC.V_STUDNO... : SELECT 한 STUDNO,NAME,HEIGHT 를 각각V_STUDNO, V_NAME,V_HEIGHT에 넣어준다.

 

  • 나머지는 SQL 문의 조건절과 같이 해준다음 출력해준다.
EXECUTE RECORD_STUD(10101);

STUDNO가 10101인 학생정보 이름,키를 출력한다.

 

실행결과

 

 

위와 같은 방법으로 SQL문의 JOIN문도 사용 가능하다.

 

EMP DEPT 특정 사원의 사원정보와 부서정보출력하는 프로시저 생성  이라는 문제를 냈을때 

사원테이블
부서 테이블

만약 SMITH의 사원정보를 입력하면 SMITH의 정보와, 해당 부서이름, 위치 까치 출력 할 수도 있다.

 

CREATE OR REPLACE PROCEDURE RECORD_EMP(P_EMPNO IN EMP.EMPNO%TYPE)
IS
   TYPE ETYPE IS RECORD(
   V_EMPNO NUMBER(10),V_ENAME VARCHAR2(10),V_JOB VARCHAR2(10),V_DEPTNO NUMBER(10), 
   VE_DEPTNO NUMBER(10), VE_DNAME VARCHAR2(30),VE_LOC VARCHAR2(10));
   EMREC ETYPE;
BEGIN
  SELECT E.EMPNO,E.ENAME,E.JOB,D.DNAME,D.LOC,D.DEPTNO
  INTO
   EMREC.V_EMPNO,EMREC.V_ENAME,EMREC.V_JOB,EMREC.VE_DNAME,EMREC.VE_LOC,EMREC.VE_DEPTNO
  FROM EMP E,DEPT D --SQL문과 같은방식으로 하면 된다.
  WHERE EMPNO=P_EMPNO AND e.deptno=d.deptno;
  DBMS_OUTPUT.put_line('사원번호:'|| EMREC.V_EMPNO
  ||' 이름:'|| EMREC.V_ENAME
  ||' 직업:'||EMREC.V_JOB
  ||' 부서이름:'||EMREC.VE_DNAME
  ||' 부서위치:'||EMREC.VE_LOC||
  ' 부서번호:'||EMREC.VE_DEPTNO);
END RECORD_EMP;

실행 결과