저장 프로시저
- 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 절의 처리를 유도
'Database' 카테고리의 다른 글
해커랭크 SQL문제_0712 (0) | 2021.07.12 |
---|---|
CHAPTER 09. 패키지(package)와 트리거(trigger) (0) | 2021.03.13 |
CHAPTER 07. PL/SQL (0) | 2021.03.12 |
CHAPTER 06. 데이터 정의어(DDL) (0) | 2021.03.10 |
CHAPTER 05. 데이터 갱신과 트랜잭션 제어 (0) | 2021.03.10 |