Oracle PL/SQL 강좌
PL/SQL 레코드 11 15 59,337

by 김정식 PLSQL RECORD PLSQL 레코드 복합 데이터 타입 [2002.01.20]


  PL/SQL레코드여러개의 데이터 타입을 갖는 변수들의 집합이다.

  스칼라, RECORD, 또는 PL/SQL TABLE datatype중 하나 이상의 요소로 구성 된다.

  논리적 단위로서 필드 집합을 처리할 수 있도록 해 준다.

  PL/SQL 테이블과 다르게 개별 필드의 이름을 부여할 수 있고, 선언시 초기화가 가능하다.

PL/SQL 레코드 문법 및 선언예제

 
-- 선언 예제
TYPE record_test IS RECORD 
  ( record_empno   NUMBER, 
    record_ename   VARCHAR2(30), 
    record_sal     NUMBER); 

-- record_test 레코드 타입으로 prd_record변수를 선언해서 사용 
prd_record    record_test;

-- 아래 프로시저에서 사용된 예제를 보면 이해가 쉽게 갈 것이다.
    

PL/SQL 레코드 예제

 
SQL> CREATE OR REPLACE PROCEDURE Record_Test
      ( p_empno IN emp.empno%TYPE )

   IS

     -- 하나의 레코드의 세가지의 변수타입 선언 

     TYPE emp_record IS RECORD
     (v_empno    NUMBER,
      v_ename    VARCHAR2(30),
      v_hiredate  DATE );

     emp_rec   emp_record ;

   BEGIN

     DBMS_OUTPUT.ENABLE;

     -- 레코드의 사용 
     SELECT empno, ename, hiredate
     INTO emp_rec.v_empno, emp_rec.v_ename, emp_rec.v_hiredate
     FROM emp
     WHERE empno = p_empno;

     DBMS_OUTPUT.PUT_LINE( '사원번호 : ' || emp_rec.v_empno );
     DBMS_OUTPUT.PUT_LINE( '사원이름 : ' || emp_rec.v_ename );
     DBMS_OUTPUT.PUT_LINE( '입 사 일 : ' || emp_rec.v_hiredate);

   END;
 / 

-- (DBMS_OUTPUT.PUT_LINE을 출력하기 위해 사용)
SQL> SET SERVEROUTPUT ON ;  

-- 실행 결과 
SQL> EXECUTE Record_Test(7369);

사원번호 : 7369
사원이름 : SMITH
입 사 일 : 80/12/17

PL/SQL 처리가 정상적으로 완료되었습니다. 

-- %ROWTYPE 예제와 비교해 보세요 
    

- 강좌 URL : http://www.gurubee.net/lecture/1048

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 시근땀 [2006.03.21 17:11:35]
그러게요. %rowtype 사용하는거랑 비슷한 것 같은데요.
그래도 웬지 %rowtype을 쓰는게 더 좋아보이네요.
그런데 기능은 같은가요?
pl/sql record 를 쓰지 않으면 안될 때가 있는건가요?

by 승일 [2006.04.10 11:21:07]
음...table의 전체컬럼 데이타타입을 가져와서 쓰고 싶은것만 골라서 쓰는 %ROWTYPE보다는 퍼포먼스면에서 더 뛰어날듯한데요...

by emotion [2006.05.11 11:37:50]
차이라면 타입을 정확히 알때와 모를때 군요....%rowtype가 편하긴 해도 이게 성능이 나을듯...

by 제육덩어리 [2006.09.25 21:44:46]
근데요 오알디쩜 아이디가 모에요??

by 웅 [2007.05.04 10:53:50]
테이블에 종속인가 아닌가가 차이점인것 같네요 ^^;

by 왕창부셔다부셔 [2007.07.25 11:46:38]
제가 보기에는 C 의 structure 와 비슷하게 보이는데...맞나요..?
물론..안에 들어 가는..변수와 데이터 타입은..테이블에 종속 되어야 되는 걸로 보이고요...아닌가..?

by 김윤경 [2007.11.08 15:23:59]
rowtype이 더 편한 것 같네요.
record는 형을 일일이 지정해주는 만큼 성능이 좋을 것 같아요.

by 지선 [2009.11.07 04:23:48]
차이는 query결과 1row만 처리 가능하느냐 여러 row가 처리 가능하냐 아닐까요?

by KATE [2011.06.21 11:42:10]
%ROWTYPE은 하나의 테이블에 대한 참조만 가능하지만
PL SQL RECORD는 두개 이상의 조건을 만족하는 테이블을 조인한 결과를
담을 수 있습니다. 사용의 취지 자체가 다를거 같네요

by Developer [2011.12.27 12:28:33]
강좌가 간략하게잘 설명은 되어있습니다.

근대여기서 하나를 파고들려면.. 이해하기가 너무 어렵네요..

혹시 초보가 볼만한 pl/sql책있으시면 추천좀 부탁드립니다.

by 돌이맹이 [2012.02.29 15:27:31]
아 왜 결과값이 DBMS_OUTPUT 이 안나오고 '익명 블록이 완료되었습니다.' 만 나올까요?

by 김태형 [2013.12.10 14:52:14]
SET SERVEROUTPUT ON 하고 EXECUTE 해보시면 잘 됩니다.

by Dan9 [2013.11.22 14:47:51]

감사합니다. 많이 배웁니다.

by 준티 [2015.12.22 15:57:19]

DBMS_OUTPUT.PUT_LINE 안나오시는 분들

보기 - DBMS출력 누르시고,

나오는 새창에서 + 버튼으로 계정 연결하시면 serveroutput 볼수 있습니다.!


by 크레이지황 [2016.04.03 21:55:58]

rowtype는 테이블의 칼럼형태를 다 갖고오지만,

record는 자기 입맛데로 원하는 컬럼의 데이터형만 선언하여 사용할 수 있군요

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입