저장 프로시저

- PL/SQL로 작성된 모듈로 실무에서 가장 많이 사용하는 형태
- 매개변수 수의 제한이 없음
- CREATE PROCEDURE 명령을 사용하며 기본 형식은 아래와 같음
- OR REPLACE 옵션은 이미 같은 이르믜 프로시저가 존재하는 경우 기존의 프로시저 내용을 지우고 새로운 내용으로 바꾸어줌
- ARGUMENT는 저장 프로시저와 호출 프로그램 사이의 값의 전달에 필요한 변수

사용자 정의 함수

- 시스템 개발 시 자주 사용되는 프로그램 모듈을 개발자들은 함수로 만들어 사용하게 됨
- 함수를 실행하고 호출 프로그램으로 돌아갈 때 하나의 값을 가지게 되면 이 값은 함수의 이름에 저장
- 따라서 함수의 이름에 데이터를 저장하기 위한 데이터 타입이 필요
- 이를 RETURN data_type절로 정의하며 실행부에서는 RETURN variable로 표현
- 함수 삭제 시에는 DROP FUNCTION절을 사용 

커서와 FETCH

- 커서란 SQLPlus 또는 응용프로그램에서 사용자가 실행한 SELECT 문의 처리 결과를 관리하기 위한 포인터
- 커서는 SELECT문의 실행 결과가 복수 행을 가질 경우에 사용됨
- 결과가 복수행이므로 반복적으로 데이터 행을 읽는 과정이 필요
- LOOP문을 이용하여 검색 결과 데이터 행을 읽어올 때 FETCH문을 이용
- CLOSE는 커서를 종료하게 됨

- 오라클에서 기본적으로 제공하는 커서의 속성

  • %ROWCOUNT속성 : 실행된 커서 문장에서 FETCH 문에 의해 읽혀진 행수를 나타내는 속성
  • %FOUND속성 : FETCH문 실행 후 결과가 있는 지 여부를 확인하는 속성
  • %NOTFOUND속성 :  FETCH문 실행 후 결과가 없는 지 여부를 확인하는 속성
  • %ISOPEN :  선언된 커서가 OPEN 된 상태인지, 아닌지를 알 수 있는 속성
    ex) if %isopen then
                fetch t_cursor into v_stu_no, v_sub_no, v_cour_grade;
          else
                open t_cursor;
          end if;

예외 처리

- PL/SQL 블록이 실행되는 동안 에러가 발생하거나,
예외적인 상황이 발생할 수 있으며 이 경우 처리 방안을 EXCEPTION절에 정의

처리 조건명 설명
NO_DATA_FOUND 검색문 사용 후 결과가 있는지 여부 판단
NOT_LOGGED_ON 데이터베이스에 연결 상태를 판단
TOO_MANY_ROWS SELECT문에 INTO 절을 사용한 경우 SELECT 절의 결과가 복수행일 경우
VALUE_ERROR 변수이 길이보다 큰 값을 저장하는 경우
ZERO_DEVIDE 열의 값을 0값으로 나누는 경우
INVALID_CURSOR 커서 선언의 SELECT 문에 대한 연산이 부적절한 경우
DUP_VAL_ON_INDEX UNIQUE INDEX가 설정된 열에 중복 값이 입력하는 경우

- 미리 제공된 에러 처리 방법에 의해 대부분 SQL 문의 예외 처리가 가능하나,
프로그램을 진행하다 보면 이외의 예외 발생 가능
- 이 경우 예외 처리를 위해 아래와 같은 형식으로 프로그램을 구현
- BEGIN 절에서 IF문을 이용하여 조건에 맞으면 예외조건명을 RAISE 문으로 정의하고 EXCEPTION 절의 처리를 유도