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보다 명시적인 컬럼 나열이 낫기도 함.
반응형