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…
댓글 없음:
댓글 쓰기