HPL/SQL - %ROWTYPE 속성

HPL/SQL - %ROWTYPE 속성

%ROWTYPE 속성은 지정한 데이터베이스 테이블과 동일한 컬럼과 데이터 타입을 가지는 레코드 변수를 선언할 수 있게 해 줘요. 테이블 구조가 바뀌어도 변수 선언을 다시 고칠 필요 없이 자동으로 따라가니까 굉장히 편리해요.

출처: 문서

본문

문법(Syntax):

var_name [schema.]table_name%ROWTYPE

예제(Examples):

SELECT ... INTO 구문으로 테이블의 특정 행을 %ROWTYPE 변수에 담아 사용할 수 있어요.

DECLARE 
  v orders%ROWTYPE;
BEGIN
  SELECT * INTO v FROM orders LIMIT 1;
  DBMS_OUTPUT.PUT_LINE('Item: ' || v.name || ' - ' || v.description);
END;

커서(CURSOR)와 함께 사용해 한 행씩 읽을 수도 있어요.

DECLARE 
  v orders%ROWTYPE;
  CURSOR c IS SELECT * FROM orders;
BEGIN
  OPEN c1;
  FETCH c1 INTO v1;
  DBMS_OUTPUT.PUT_LINE('Item: ' || v.name || ' - ' || v.description);
  CLOSE c1;
END;

FOR ... LOOP 반복문 안에서도 활용할 수 있어요.

BEGIN
  FOR v IN (SELECT * FROM orders)
  LOOP
    DBMS_OUTPUT.PUT_LINE('Item: ' || v.name || ' - ' || v.description);
  END LOOP;
END;

동적 SQL(EXECUTE IMMEDIATE)의 결과를 받아올 때도 사용할 수 있어요.

DECLARE
  v orders%ROWTYPE;
BEGIN
  EXECUTE IMMEDIATE 'SELECT * FROM orders LIMIT 1' INTO v;
  DBMS_OUTPUT.PUT_LINE('Item: ' || v.name || ' - ' || v.description);
END;

호환성(Compatibility): Oracle

더 알아보기 (Learn more)

%ROWTYPE은 Oracle PL/SQL 스타일에서 온 기능이에요. 레코드형 변수를 다루는 다른 방법인 DECLARE 문법과 함께 보면 더 이해하기 쉬워요.