IT개발/Oracle

Oracle Pl/SQL 변수선언이란?

재욱(JaeUk) 2025. 4. 14. 13:32
반응형
 
아래 Oracle PL/SQL의 변수선언 DECLARE쪽에 설명하는 부분입니다
저 또한 나중에 참고용으로 확인하기 위해 작성하는 게시글 입니다

 

어느 정도 부족한 지식 이해해 주시기 바랍니다.

 


 

✅ 1. sample.name%TYPE — 단일 컬럼과 같은 타입을 쓰고 싶을 때

v_name sample.name%TYPE;

sample 테이블의 name 컬럼과 같은 타입으로 변수를 선언하겠다는 의미.

 

🔍 쓰는 이유?

  • 테이블의 컬럼 타입이 바뀌어도 코드 수정 없이 자동 반영됨.
  • 타입 일관성 유지에 매우 유리함.
-- sample.name이 VARCHAR2(100)이면
v_name sample.name%TYPE; -- 자동으로 VARCHAR2(100)으로 인식됨

 


 

✅ 2. sample%ROWTYPE — 테이블 전체 구조를 따라가고 싶을 때

r_name sample%ROWTYPE;

이건 sample 테이블의 한 행 전체 구조를 담을 수 있는 변수를 만든 것

 

🔍 쓰는 이유?

  • 테이블의 모든 컬럼 값을 한꺼번에 다루고 싶을 때 유리함.
  • SELECT * INTO 로 받을 때 가장 깔끔함.
  • 코드 가독성 좋고 유지보수에 강함.

 

✅ 3. %TYPE vs %ROWTYPE 차이 비교

항목 %TYPE %ROWTYPE
적용 범위 특정 컬럼 전체 레코드(행)
예시 v_name sample.name%TYPE r_sample sample%ROWTYPE
사용 목적 특정 컬럼 타입 일치 테이블 구조 그대로 가져오기
장점 타입 일관성, 변경 자동 반영 컬럼 많을 때 일일이 선언할 필요 없음
단점 여러 컬럼은 각각 선언해야 함 컬럼 하나만 필요할 땐 오히려 비효율

 

사용 예제

--테이블 먼저 만들고 시작해주세요
CREATE TABLE sample (
  id NUMBER PRIMARY KEY,
  name VARCHAR2(100),
  age NUMBER
);

INSERT INTO sample (id, name, age) VALUES (1, '홍길동', 25);
INSERT INTO sample (id, name, age) VALUES (2, '김철수', 30);
COMMIT;

 


✅ 사용 예제 정리

📌 %TYPE 사용 예제

DECLARE
  v_name sample.name%TYPE;
BEGIN
  SELECT name
  INTO v_name
  FROM sample
  WHERE id = 1;

  DBMS_OUTPUT.PUT_LINE('이름: ' || v_name);
END;

📌 %ROWTYPE 사용 예제

DECLARE
  v_row sample%ROWTYPE;
BEGIN
  SELECT *
  INTO v_row
  FROM sample
  WHERE id = 1;

  DBMS_OUTPUT.PUT_LINE('이름: ' || v_row.name || ', 나이: ' || v_row.age);
END;

 


✅ 실무에서 유용한 팁

  • 테이블 스키마가 자주 바뀌는 프로젝트에서는 %TYPE, %ROWTYPE을 쓰면 컴파일 오류 없이 안전하게 동작할 확률이 높음.
  • 단, 너무 무조건적으로 사용하는 것보다는 필요한 경우에만 쓰는 것이 유지보수성 면에서 유리함. 예를 들어, 성능 이슈가 있는 곳에서는 %ROWTYPE보다 명시적인 컬럼 나열이 낫기도 함.
반응형