데이터베이스 -15

김정현·2024년 5월 20일
0

데이터베이스

목록 보기
14/16
post-thumbnail

레코드와 컬렉션

레코드

  • 각기 다른 데이터를 하나의 변수에 저장하는 데 사용
  • 레코드에 포함된 변수는 레코드 이름과 마침표(.)로 사용할 수 있다.

형식

TYPE 레코드 이름 IS RECORD(
    변수 이름 자료형 NOT NULL := (또는 DEFAULT) 값 또는 값이 도출되는 여러 표현식
);

참고)

레코드를 사용한 INSERT

1) DEPT_RECORD 테이블 생성하기

CREATE TABLE DEPT_RECORD AS SELECT * FROM DEPT;

2) 레코드를 사용하여 INSERT 하기

INSERT INTO DEPT_RECORD VALUES DEPT_DATA;

UPDATE DEPT_RECORD
	SET ROW = DEPT_DATA 
WHERE DEPTNO = 99;

레코드를 포함하는 레코드

1) 레코드에 포함된 변수의 자료형을 지정할 때 다른 레코드를 지정가능
2) 레코드에 다른 레코드 포함하기

참고)
단일 조회값 -> 변수에 넣는 방법
SELECT 필드명, ...INTO 변수, ...FROM ... WHERE ...

DECLARE 
	TYPE REC_DEPT IS RECORD(
		DEPTNO DEPT.DEPTNO%TYPE,
		DNAME DEPT.DNAME%TYPE,
		LOC DEPT.LOC%TYPE
	);

	TYPE REC_EMP IS RECORD (
		EMPNO EMP.EMPNO%TYPE,
		ENAME EMP.ENAME%TYPE,
		DINFO REC_DEPT
	);

	EMP_DATA REC_EMP;
BEGIN
	SELECT E.EMPNO, E.ENAME, D.DEPTNO, D.DNAME, D.LOC
		INTO 
			EMP_DATA.EMPNO,
			EMP_DATA.ENAME,
			EMP_DATA.DINFO.DEPTNO,
			EMP_DATA.DINFO.DNAME,
			EMP_DATA.DINFO.LOC
	FROM EMP E, DEPT D 
	WHERE E.DEPTNO = D.DEPTNO AND E.ENAME = 'SCOTT';

	DBMS_OUTPUT.PUT_LINE('EMPNO : ' || EMP_DATA.EMPNO);
	DBMS_OUTPUT.PUT_LINE('ENAME : ' || EMP_DATA.ENAME);
	DBMS_OUTPUT.PUT_LINE('DEPTNO : ' || EMP_DATA.DINFO.DEPTNO);
	DBMS_OUTPUT.PUT_LINE('DNAME : ' || EMP_DATA.DINFO.DNAME);
	DBMS_OUTPUT.PUT_LINE('LOC : ' || EMP_DATA.DINFO.LOC);
END;

컬렉션

자료형이 같은 여러 데이터를 저장하는 컬렉션

  • 컬렉션은 특정 자료형의 데이터를 여러 개 저장하는 복합 자료형
  1. 연관배열

1) 인덱스라고 불리는 키(key), 값(value)으로 구성되는 컬렉션

2) 중복되지 않은 유일한 키를 통해 값을 저장하고 불러오는 방식을 사용

3) 형식

TYPE 연관 배열 이름 IS TABLE OF 자료형 [NOT NULL]
INDEX BY 인덱스형;

4) 연관 배열 사용하기
5) 연관 배열 자료형에 레코드 사용하기

DECLARE 
	TYPE REC_DEPT IS RECORD(
		DEPTNO DEPT.DEPTNO%TYPE,
		DNAME DEPT.DNAME%TYPE
	);

	TYPE TYPE_DEPT IS TABLE OF REC_DEPT
	INDEX BY PLS_INTEGER;
	
	DEPT_ARR TYPE_DEPT;
	IDX PLS_INTEGER := 1;
BEGIN 
	FOR d IN (SELECT DEPTNO, DNAME FROM DEPT) LOOP
		DEPT_ARR(IDX).DEPTNO := d.DEPTNO;
		DEPT_ARR(IDX).DNAME := d.DNAME;
			
		DBMS_OUTPUT.PUT_LINE(DEPT_ARR(IDX).DEPTNO || 
			' : ' || DEPT_ARR(IDX).DNAME);	
	
		IDX := IDX + 1;
	END LOOP;
END; 

0개의 댓글