데이터베이스 -16

김정현·2024년 5월 20일
0

데이터베이스

목록 보기
15/16

커서와 예외처리

커서

  • SELECT문 또는 데이터 조작어 같은 SQL문을 실행했을 때 해당 SQL문을 처리하는 정보를 저장한 메모리 공간
  • 커서는 이 메모리의 포인터
  • 커서는 사용 방법에 따라 명시적(explicit) 커서와 묵시적(implicit) 커서로 나뉜다.

단계

-커서 선언(Declaration)
-커서 열기(open)
-커서에서 읽어온 데이터 사용(Fetch)
-커서 닫기(Close)

작성법

DECLARE 
    CURSOR 커서이름 IS SQL문;  -- 커서 선언(Declaration)
BEGIN
    OPEN 커서 이름;   -  커서 열기(open)
    FETCH 커서이름 INTO 변수  - 커서로부터 읽어온 데이터 사용(Fetch)
    CLOSE 커서이름;  -- 커서 닫기(Close)
END;
  • 여러 개의 행이 조회되는 경우(FOR LOOP문)
    -> OPEN, CLOSE, FETCH 생략 가능
DECLARE
	CURSOR C1 IS
		SELECT * FROM DEPT;
BEGIN
	FOR d IN C1 LOOP
		DBMS_OUTPUT.PUT_LINE('DEPTNO : ' || d.DEPTNO);
		DBMS_OUTPUT.PUT_LINE('DNAME : ' || d.DNAME);
		DBMS_OUTPUT.PUT_LINE('LOC : ' || d.LOC);
		DBMS_OUTPUT.PUT_LINE('-------------------------');
	END LOOP;
END;
  • 커서에 파라미터 사용
CURSOR 커서명 (변수명 자료형, ....) IS 
	SELECT .... 변수는 SELECT문 내에서 사용 가능
    
OPEN 커서명(값, ...);

묵시적 커서

1) 다른 선언 없이 SQL문을 사용했을 때 오라클에서 자동으로 선언되는 커서
2) 사용자가 OPEN, FETCH, CLOSE를 지정하지 않습니다. PL/SQL문 내부에서 DML 명령어나 SELECT INTO문 등이 실행될 때 자동으로 생성 및 처리

예외처리

EXCEPTION
    WHEN 예외 이름1 [OR 예외 이름2 - ] THEN
        예외 처리에 사용할 명령어;
    WHEN 예외 이름3 [OR 예외 이름4 - ] THEN 
        예외 처리에 사용할 명령어;
    ...
    WHEN OTHERS THEN
        예외 처리에 사용할 명령어;

EX)

DECLARE 
	-- V_DNAME NUMBER;
	V_DNAME VARCHAR2(20);
	V_NUM NUMBER := 10;
BEGIN 
	SELECT DNAME INTO V_DNAME FROM DEPT WHERE DEPTNO=10;
	DBMS_OUTPUT.PUT_LINE(V_NUM / 0);

EXCEPTION 
	WHEN VALUE_ERROR THEN 
		DBMS_OUTPUT.PUT_LINE('수치 또는 값 오류');
	
	WHEN TOO_MANY_ROWS THEN
		DBMS_OUTPUT.PUT_LINE('여러행 조회 오류');
	
	WHEN OTHERS THEN
		DBMS_OUTPUT.PUT_LINE('기타 오류');
END; 

어떤 예외인지 모를때 OTHERS

오류 코드와 오류 메시지 사용

SQLCODE : 오류 번호
SQLERRM : 오류 메시지

0개의 댓글