조합 데이터 유형 작업 기초
레코드를 생성하는 구문은 다음과 같다.
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 |