DATABASE(oracleDB 11g)/PLSQL

[PL/SQL]조합 데이터 유형 작업 기초

SEUNGSAMI 2019. 2. 19. 11:53

조합 데이터 유형 작업 기초



레코드를 생성하는 구문은 다음과 같다.

1
2
TYPE type_name IS RECORD
    (field_declaration[, field_declaration]…);
cs


1
identifier type_name;
cs


블록에서 모든 컬럼을 가져올때 다음과 같은 방법으로 사용한다.

1
2
DECLARE
identifier reference%ROWTYPE;
cs


1
2
3
4
5
6
7
8
DECLARE
    rec_emp   emp%rowtype;
BEGIN
    SELECT *
    INTO rec_emp
    FROM emp
    WHERE empno = 7788;
END;
cs



하지만 많은 컬럼을 가지고있는 테이블에서 여러개의 컬럼을 가져올경우 다음과 같은 방법을 사용한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DECLARE
    TYPE REC_TYP_EMP IS RECORD (
    EMPNO NUMBER(4),
    ENAME EMP.ENAME%TYPE,
    JOB EMP.JOB%TYPE,
    SAL EMP.SAL%TYPE );
 
    REC_EMP REC_TYP_EMP;
BEGIN
    SELECT EMPNO, ENAME, JOB, SAL INTO REC_EMP
    FROM EMP
    WHERE EMPNO = 7788;
    
    --INSERT INTO XXXX VALUES REC_EMP;
    --UPDATE EMP SET ROW = REC_EMP
END;
/
cs



다음 예시를 참고하자.

두개의 구문은 결과가 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
DECLARE
    TYPE REC_TYP_DEPT IS RECORD (
    DEPTNO COPY_DEPT.DEPTNO%TYPE,
    DNAME  COPY_DEPT.DNAME%TYPE,
    LOC    COPY_DEPT.LOC%TYPE,
    SUM_SAL COPY_DEPT.SUM_SAL%TYPE);
    
    REC_DEPT REC_TYP_DEPT;
BEGIN
    FOR i IN 1..4 LOOP
 
    SELECT DEPTNO, DNAME, LOC, 0 
      INTO REC_DEPT 
    FROM DEPT 
    WHERE DEPTNO = i * 10
        
    SELECT SUM(SAL) INTO REC_DEPT.SUM_SAL 
    FROM EMP 
    WHERE DEPTNO = i * 10
    
    INSERT INTO COPY_DEPT VALUES REC_DEPT ; 
    END LOOP;
END;
/
 
 
 
BEGIN
INSERT INTO COPY_DEPT
SELECT D.*, E.SUM_SAL
FROM DEPT D
LEFT OUTER JOIN
    (SELECT DEPTNO, SUM(SAL) AS SUM_SAL
     FROM EMP
     GROUP BY DEPTNO) E
ON D.DEPTNO = E.DEPTNO;
END;
/   
cs

이경우 첫번째의 과정이 더 선호된다. 중간중간 트랜잭션에 대한 구문을 추가할 수 있기 때문이다.



SQL을 배운지 얼마 되지 않아 잘못된 내용이 있을 수 있습니다. 틀린 내용이있다면, 댓글로 달아주세요.











'DATABASE(oracleDB 11g) > PLSQL' 카테고리의 다른 글

[PL/SQL]예외처리의 기초  (0) 2019.02.20
[PL/SQL]명시적 커서 기초  (0) 2019.02.19
[PL/SQL]제어구조문의 기초  (0) 2019.02.19
[PL/SQL]PL/SQL 내의 SQL문의 기초  (0) 2019.02.18
[SQL]SQL 문장 처리 과정  (0) 2019.02.18