천재 블로그
[PL/SQL] COMPOSITE - RECORD 타입 본문
RECORD 데이터 타입의 정의
Composite데이터 타입에는 RECORD, TABLE, 중첩테이블, VARRAY가 있는데, 이 글에서는 RECORD
를 설명합니다.
레코드 타입은 필드(여러가지 종류의 속성값)를 하나로 합쳐서 다루는 데이터 타입입니다.
예를 들어 부서번호(넘버형), 부서명(문자형)을 합쳐 「부서형」으로 정의할 수 있는 데이터 타입입니다.
TYPE 레코드_타입명 IS RECORD
(필드명 데이터_타입 [NOT NULL] [{ := | DEFAULT} {값 | 식 | SQL함수}]
[, 필드명 데이터_타입 [NOT NULL] [{ :=| DEFAULT} {값 | 식 | SQL함수}]
...... ]);
레코드 타입의 정의 예제
부서형을 나타내는 레코드 타입명을 rec_dept라고 하고 부서번호, 부서명의 필드를 각각 deptno NUMBER dname VARCHAR2(20)라고 할 때 아래의 그림처럼 설명할 수 있습니다.
정의 기술방법은 아래의 문장과 같습니다.
1 2 3 4 5 | DECLARE TYPE rec_dept IS RECORD (v_deptno NUMBER ,v_dname VARCHAR2(20)); |
레코드 타입의 선언
변수명 레코드타입명;
1 | v_rec_dept rec_dept; |
레코드 타입을 정의한 뒤 선언해야 사용할 수 있습니다.
레코드 타입의 참조
변수명.필드명;
INSERT INTO 테이블명 VALUES 레코드타입_변수명;
UPDATE 테이블명 SET ROW = 레코드타입_변수명;
레코드 타입의 참조 예제
INSERT
1 2 3 4 5 6 7 8 9 10 | DECLARE TYPE rec_dept IS RECORD -- RECORD타입의 정의 (v_deptno NUMBER := 50 ,v_dname VARCHAR2(14) := '인재개발'); v_rec_dept rec_dept; -- RECORD타입의 선언 BEGIN INSERT INTO dept(deptno, dname) VALUES(v_rec_dept.v_deptno, v_rec_dept.v_dname); -- 필드를 참조 END; / |
하나의 값만 참조하는 경우 등은 이런식으로 「레코드타입_변수명.필드명」으로 지정해야합니다만,
이 예제처럼 같은 개수의 컬럼을 참조하는 경우는 그냥 레코드타입의 변수명만 적어도 무관합니다.
1 2 3 4 5 6 7 8 9 10 11 | DECLARE TYPE rec_dept IS RECORD -- RECORD타입의 정의 (v_deptno NUMBER := 50 ,v_dname VARCHAR2(14) := '인재개발' ,v_loc VARCHAR2(13) := '도쿄'); v_rec_dept rec_dept; -- RECORD타입의 선언 BEGIN INSERT INTO dept VALUES v_rec_dept ; -- 필드를 참조 END; / |
※ 주의! 레코드타입의 변수명만 적어서 사용할 경우, 테이블 컬럼명을 지정하면 에러가 납니다.
반드시 테이블명만 적어서 사용해야합니다.
1 2 | INSERT INTO dept(deptno, deptname, loc) VALUES v_rec_dept ; |
↓
UPDATE
1 2 3 4 5 6 7 8 9 10 11 12 | DECLARE TYPE rec_dept IS RECORD -- RECORD타입의 정의 (v_deptno NUMBER := 40 ,v_dname VARCHAR2(14) := '관리본부' ,v_loc VARCHAR2(13) := '서울'); v_rec_dept rec_dept; -- RECORD타입의 선언 BEGIN UPDATE dept SET ROW = v_rec_dept WHERE deptno = 40; END; / |
레코드 타입의 참조 결과
1 | SELECT * FROM dept WHERE deptno = 50; |
UPDATE
1 | SELECT * FROM dept WHERE deptno = 40; |
'프로그래밍 > Oracle' 카테고리의 다른 글
[PL/SQL] IF문 (0) | 2019.06.21 |
---|---|
[PL/SQL] LOB 데이터 타입 (0) | 2019.06.19 |
[PL/SQL] 스칼라형 데이터타입 (0) | 2019.06.19 |
[PL/SQL] 변수의 대입과 초기값의 정의 (0) | 2019.06.18 |
[PL/SQL] 프로그래밍 주의 사항 (0) | 2019.06.18 |