2016년 9월 28일 수요일

[오라클학원,SQL학원,PLSQL학원추천◆탑크리에듀]#8. PLSQL복합데이터타입(Composite Data Type, Record Type)

#8. PLSQL복합데이터타입(Composite Data Type, Record Type)

Record Type

n  프로그래밍 언어의 구조체와 유사하다.
n  하나의 레코드 타입안에는 Scalar Data Type, 다른 Record Type, Table Type들을 가지고 있어야 한다.
n  먼저 TYPE을 정의 후 변수의 데이터 타입으로 할당하여 사용한다.
n  다음과 같이 Table Type을 정의할 때 Record Type을 사용할 수도 있다.

DECLARE
   TYPE empRecordType IS RECORD (
      empno  SMALLINT,
      ename  VARCHAR2
    );
   TYPE empTableType IS TABLE OF empRecordType
      INDEX BY BINARY_INTEGER;

SQL> edit ojc9

SET SERVEROUTPUT ON
CREATE OR REPLACE PROCEDURE ojc9(p_empno IN NUMBER)
IS
TYPE emp_record_type is record (
  empno emp.empno%TYPE,
  ename emp.ename%TYPE,
  sal   emp.sal%TYPE
);
emp_record emp_record_type;
BEGIN
   SELECT empno, ename, sal
     INTO emp_record.empno, emp_record.ename, emp_record.sal
     FROM emp
    WHERE empno = p_empno;

   DBMS_OUTPUT.PUT_LINE(emp_record.empno || ' : ' || emp_record.ename || ' : ' || emp_record.sal);

EXCEPTION
    WHEN NO_DATA_FOUND THEN
      DBMS_OUTPUT.PUT_LINE('no data...');
    WHEN TOO_MANY_ROWS THEN
      DBMS_OUTPUT.PUT_LINE('to many rows...');
END ojc9;
/

-- 위에서 작성한 ojc9.sql 파일을 실행하여 ojc9 라는 프로시저를 생성한다.
-- 오류가 발생하면 show errors로 확인 후 디버깅 해야 한다.
SQL> @ojc9
프로시저가 생성되었습니다.

SQL> exec ojc9(7788)
7788 : SCOTT : 3000

-- EMP 테이블에 없는사원번호를 입력, SELECT되는 데이터가 한건도 없으므로 오류발생.
-- EXCEPTION절로 빠져 WHEN NO_DATA_FOUND 처리부가 실행된다.
-- NO_DATA_FOUND는 오라클서버에 미리 정의된 예외명이며오라클 서버 오류인 ORA-01403에러에 대해 부여된 예외 명칭이다.
SQL> exec ojc9(1234)
No data…


댓글 없음:

댓글 쓰기