안녕하세요. 갓대희 입니다. 이번 포스팅은 [ [Oracle] PL/SQL 기초 - 레코드(Record) ] 입니다. : )
혹시 이해가 안되는 내용이 많을 수 있으니, 하단의 예제부터 보는것도 추천 한다.
0.Oracle Record
▶ 0. 레코드(Record)란?
- PL/SQL에서 제공하는 테이블 형태의 데이터 타입 이다.
- 여러개의 데이터 타입을 갖는 변수들의 집합.(일반 빌트인 타입으로 변수 선언시 1개의 값만 가질 수 있다.) - 논리적 단위로서 필드 집합을 처리할 수 있도록 해준다. - 스칼라(%type/%rowtype), RECORD, 또는 PL/SQL TABLE datatype 중 하나 이상의 요소로 구성 - PL/SQL 테이블과 다르게 개별 필드의 이름을 부여할 수 있고, 선언시 초기화가 가능하다. 하지만 테이블과 다르게 레코드가 가질 수 있는 로우의 수는 단 한개 뿐이다.
- 이 레코드 변수를 통해 테이블에 INSERT, UPDATE도 가능하다.
▶ 1. 문법
TYPE 레코드이름 IS RECORD (
필드1 데이터타입1 [[NOT NULL] := DEFAULT],
필드2 데이터타입2 [[NOT NULL] := DEFAULT],
...
);
레코드이름 테이블명%ROWTYPE; 레코드이름 커서명%ROWTYPE;
1.OracleTable of RECORD
▶ 0.Table of RECORD
- 테이블 타입 선언 - 한개의 변수로 여러개의 데이터 타입을 갖는 변수들의 집합
▶ 1. 문법
- 특정 테이블의 모든 컬럼을 받아 레코드 선언시 %ROWTYPE을 사용 한다.
TYPE 변수명 IS TABLE OF 테이블명%ROWTYPE INDEX BY BINARY_INTEGER;
2. 커서형 레코드
▶ 0.커서형 레코드
- 커서를 레코드 변수로 받을 수 있다.
▶ 1. 문법
- 커서이름%ROWTYPE
ex) 레코드, 테이블 타입 레코드, 커서형 레코드 예제
DECLARE
TYPE RECORD1 IS RECORD (
DEPTNO NUMBER
, DNAME VARCHAR2(14)
, LOC VARCHAR2(13)
);
REC1 RECORD1; -- 0. 레코드 선언
REC2 DEPT%ROWTYPE; -- 1. 테이블형 레코드 선언
CURSOR C1 IS
SELECT DEPTNO, DNAME, LOC
FROM DEPT;
REC3 C1%ROWTYPE; -- 2.커서형 레코드 선언
BEGIN
OPEN C1;
LOOP
FETCH C1 INTO REC3;
EXIT WHEN C1%NOTFOUND;
dbms_output.put_line('DEPTNO : ' || REC3.DEPTNO || ', DNAME : ' || REC3.DNAME);
END LOOP;
dbms_output.put_line('************************************');
-- 0. 레코드 사용
REC1.DEPTNO := 50;
REC1.DNAME := 'RESEARCH2';
REC1.LOC := 'LA';
-- 1. 테이블형 레코드 사용
REC2.DEPTNO := 60;
REC2.DNAME := 'RESEARCH3';
REC2.LOC := 'TEXAS';
INSERT INTO DEPT VALUES REC1; -- 0. 레코드 사용
INSERT INTO DEPT VALUES REC2; -- 1. 테이블형 레코드 사용
FOR C2 IN (
SELECT DEPTNO, DNAME, LOC
FROM DEPT
)
LOOP
dbms_output.put_line('DEPTNO : ' || C2.DEPTNO || ', DNAME : ' || C2.DNAME || ', LOC : ' || C2.LOC);
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;