728x90
오라클에서 프로시저는 특정 작업을 수행하는 PL/SQL 블록으로, 반복적으로 사용될 수 있는 코드를 모듈화하여 저장합니다.
프로시저는 데이터베이스에 저장되며, 필요할 때마다 호출하여 사용할 수 있습니다.
프로시저의 기본 구조
CREATE [OR REPLACE] PROCEDURE 프로시저명
[ (파라미터1 [IN | OUT | INOUT] 타입 [, 파라미터2 [IN | OUT | INOUT] 타입 ...]) ]
IS
[지역 변수 선언;]
BEGIN
-- 실행할 SQL 문장 및 PL/SQL 코드
[EXCEPTION
-- 예외 처리 코드]
END;
프로시저 작성 및 실행 예시
CREATE OR REPLACE PROCEDURE add_employee(
p_name IN VARCHAR2,
p_salary IN NUMBER,
p_department_id IN NUMBER)
IS
BEGIN
INSERT INTO employees (name, salary, department_id)
VALUES (p_name, p_salary, p_department_id);
END;
프로시저 실행(호출) 방법
EXECUTE add_employee('홍길동', 5000000, 101);
EXECUTE 또는 EXEC 명령어를 사용하여 프로시저를 실행할 수 있습니다.
프로시저 예외처리 예시
CREATE OR REPLACE PROCEDURE PROC_TEST
IS
v_num NUMBER := 0;
BEGIN
v_num := 10/0; -- 0으로 나누기 시도, 예외 발생
EXCEPTION
WHEN ZERO_DIVIDE THEN -- 0으로 나누는 예외 처리
dbms_output.put_line('0으로 나눌 수 없습니다!');
WHEN OTHERS THEN -- 그 외 모든 예외 처리
dbms_output.put_line('오류가 발생했습니다!');
dbms_output.put_line('에러코드 : ' || SQLCODE);
dbms_output.put_line('에러메시지 : ' || SQLERRM);
END;
주요 시스템 예외 목록
* ZERO_DIVIDE: 0으로 나누려고 할 때 발생
* NO_DATA_FOUND: 쿼리 결과가 없을 때 발생
* TOO_MANY_ROWS: 단일 행 쿼리가 여러 행을 반환할 때 발생
* VALUE_ERROR: 변수 타입과 할당된 값이 일치하지 않을 때 발생
프로시저 패키지
패키지는 프로시저(Procedure)와 함수(Function)의 집합으로, 관련된 프로시저와 함수를 그룹화하여 관리할 수 있게 해줍니다. 패키지를 사용함으로써 코드의 모듈화, 재사용성 향상, 유지 보수의 용이성 등 여러 가지 장점을 얻을 수 있습니다.
-- 패키지 선언부
CREATE OR REPLACE PACKAGE my_package AS
PROCEDURE my_procedure(param1 IN NUMBER);
FUNCTION my_function(param1 IN NUMBER) RETURN NUMBER;
END my_package;
/
-- 패키지 본체
CREATE OR REPLACE PACKAGE BODY my_package AS
PROCEDURE my_procedure(param1 IN NUMBER) IS
BEGIN
-- 구현 로직
END my_procedure;
FUNCTION my_function(param1 IN NUMBER) RETURN NUMBER IS
BEGIN
-- 구현 로직
RETURN param1;
END my_function;
END my_package;
/
'웹개발 > 데이터베이스' 카테고리의 다른 글
MYSQL과 MariaDB (0) | 2024.04.07 |
---|---|
오라클 쿼리로 트리구조 데이터 조회 (0) | 2024.04.07 |
오라클 집계함수 (0) | 2024.04.05 |
데이터베이스 설계문제로 인한 이상현상 (0) | 2024.03.30 |
[오라클]트리거(Trigger) (0) | 2024.03.27 |