반응형
* 레코드를 사용하면 데이터 타입이나 길이가 다른 여러 변수들을 논리적으로 하나의 그룹으로 묶을 수 있다.
1. 선언
TYPE 타입명 IS RECORD 필드목록;
레코드변수명 타입명;
필드목록은 레코드의 필드 목록을 선언하는 부분으로, 형식은 CREATE TABLE문의 칼럼 선언가 유사한 형태를 가진다.
(예시)
DECLARE
TYPE emp_type IS RECORD(
empno NUMBER(4) NOT NULL := 0,
ename emp.ename%TYPE,
job VARCHAR2(9)
);
v_emp emp_type;
BEGIN
v_emp.empno := 9000;
v_emp.ename := '홍길동';
v_emp.job := '의적';
DBMS_OUTPUT.PUT_LINE('EMPNO = '|| v_emp.empno);
DBMS_OUTPUT.PUT_LINE('ENAME = '|| v_emp.ename);
DBMS_OUTPUT.PUT_LINE('JOB = '|| v_emp.job);
END;
- 레코드 선언 시 각 필드에는 반드시 데이터 타입을 지정해야 한다.
위의 코드를 %ROWTYPE을 활용해서 작성하면
DECLARE
v_emp emp%ROWTYPE;
BEGIN
v_emp.empno := 9000;
v_emp.ename := '홍길동';
v_emp.job := '의적';
DBMS_OUTPUT.PUT_LINE('EMPNO = '|| v_emp.empno);
DBMS_OUTPUT.PUT_LINE('ENAME = '|| v_emp.ename);
DBMS_OUTPUT.PUT_LINE('JOB = '|| v_emp.job);
END;
2. 사용
* 주의: SQL문에 사용할 경우, 오로지 레코드 변수 하나만 지정 가능하며, 다른 레코드 변수나 스칼라 변수, 상수, 리터럴 등을 같이 사용할 수 없다.
- 하나의 SQL문에 RECORD를 2개 사용할 경우, 아래와 같은 오류가 발생한다.
" PLS-00494: coercion into multiple record targets not supported "
두 개의 레코드 변수를 사용할 수 없다!
- RECORD 변수와 일반 변수를 같이 사용할 경우 아래와 같은 오류가 발생한다.
" ORA-06550: ~~ PLS-00494: 중복 레코드 대상 안에 강압이 제공되지 않습니다 "
3. 값 할당
DECLARE
TYPE emp_rec IS RECORD(
empno emp.empno%TYPE,
ename emp.ename%TYPE
);
v_emp1 emp_rec;
v_emp2 emp_rec;
v_emp3 emp_rec;
BEGIN
v_emp1.empno := 9000;
v_emp1.ename := '홍길동';
v_emp2 := v_emp1;
SELECT empno, ename INTO v_emp3
FROM emp
WHERE empno = 7788;
DBMS_OUTPUT.PUT_LINE('EMP3 NO: '||v_emp3.empno || ', NAME: '||v_emp3.ename);
END;
4. 제약사항
- 사용장소
1) SELECT문의 INTO절
2) UPDATE문의 SET ROW 절에서의 =의 오른쪽
3) INSERT문의 VALUES절
4) RETURNING절의 INTO 서브절
- 레코드는 SELECT 리스트, WHERE절, GROUP BY절, ORDER BY절에서 사용 불가능
※ 출처: 개발자를 위한 PL/SQL 프로그래밍
반응형
'프로그래밍' 카테고리의 다른 글
Oracle PL/SQL - 동적 SQL (0) | 2021.09.24 |
---|---|
Oracle PL/SQL - Cursor (0) | 2021.09.24 |
Oracle PL/SQL - Collection (0) | 2021.09.23 |
Eclipse Spring Package - Git 연동 (0) | 2021.08.14 |
[MyBatis] ORM 프레임워크 활용(1) (0) | 2021.07.06 |