728x90
반응형

OracleProcedure

Oracle의 Procedure는 반복적인 작업이나 특정 작업을 수행하는 데 사용되는 PL/SQL 코드 블록입니다. 프로시저는 하나의 이름으로 불리며, 특정 작업을 수행하고 필요에 따라 매개변수를 전달받거나 값을 반환할 수 있습니다. 주로 데이터베이스에서 복잡한 비즈니스 로직을 수행하고, 이를 재사용 가능하게 하기 위해 작성됩니다.

프로시저의 주요 특징

  • 매개변수 사용: 프로시저는 입력(IN), 출력(OUT), 그리고 입력/출력(IN OUT) 매개변수를 사용할 수 있습니다.
  • 값 반환 가능: 함수와는 달리 특정 값을 반환하지 않지만, OUT 매개변수를 통해 여러 값을 반환할 수 있습니다.
  • 재사용 가능: 한 번 작성하면 여러 곳에서 호출하여 사용할 수 있습니다.
  • 에러 처리: PL/SQL 예외 처리 구문(EXCEPTION)을 통해 오류를 관리할 수 있습니다.

프로시저 기본 구조

sql

CREATE OR REPLACE PROCEDURE procedure_name (parameters)
IS
    -- 변수 선언부
BEGIN
    -- 프로시저의 메인 로직
EXCEPTION
    -- 예외 처리부
END procedure_name;

프로시저 예제

1. 직원 급여를 증가시키는 프로시저

예제 테이블로 직원 테이블을 사용합니다.

sql

CREATE TABLE employees (
    employee_id NUMBER PRIMARY KEY,
    name VARCHAR2(50),
    salary NUMBER
);

프로시저 작성

직원의 employee_idraise_amount를 입력으로 받아서, 해당 직원의 salary를 증가시키는 프로시저를 작성해보겠습니다.

sql

CREATE OR REPLACE PROCEDURE increase_salary (
    p_employee_id IN NUMBER,
    p_raise_amount IN NUMBER
) IS
BEGIN
    -- 급여를 인상하는 업데이트 쿼리
    UPDATE employees
    SET salary = salary + p_raise_amount
    WHERE employee_id = p_employee_id;

    -- 커밋 수행
    COMMIT;
END increase_salary;

프로시저 설명

  • p_employee_id: 급여를 인상할 직원의 ID를 받는 IN 매개변수입니다.
  • p_raise_amount: 급여 인상 금액을 받는 IN 매개변수입니다.
  • 이 프로시저는 employees 테이블의 salary를 업데이트하고, 변동 사항을 데이터베이스에 저장하기 위해 COMMIT을 수행합니다.

프로시저 실행 예제

프로시저를 실행하여 employee_id가 1번인 직원의 급여를 5000만큼 인상해보겠습니다.

sql

BEGIN
    increase_salary(1, 5000);
END;

이 코드를 실행하면 employee_id가 1인 직원의 salary가 5000만큼 인상됩니다.

2. OUT 매개변수를 사용하는 프로시저 예제

이번에는 특정 직원의 급여를 조회하고, 그 결과를 출력하는 프로시저를 작성해보겠습니다.

프로시저 작성

sql

CREATE OR REPLACE PROCEDURE get_salary (
    p_employee_id IN NUMBER,
    p_salary OUT NUMBER
) IS
BEGIN
    -- 직원의 급여를 조회하여 OUT 매개변수에 할당
    SELECT salary INTO p_salary
    FROM employees
    WHERE employee_id = p_employee_id;
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        p_salary := NULL;  -- 직원이 없을 경우 NULL 반환
END get_salary;

프로시저 설명

  • p_employee_id: 급여를 조회할 직원의 ID를 받는 IN 매개변수입니다.
  • p_salary: 조회된 급여를 반환하는 OUT 매개변수입니다.
  • 직원 ID가 유효하지 않을 경우 p_salaryNULL을 할당합니다.

프로시저 실행 예제

employee_id가 1번인 직원의 급여를 출력해보겠습니다.

sql

DECLARE
    v_salary NUMBER;
BEGIN
    get_salary(1, v_salary);
    DBMS_OUTPUT.PUT_LINE('Salary: ' || v_salary);
END;

위 코드를 실행하면 직원 ID가 1번인 직원의 급여가 v_salary에 저장되고, DBMS_OUTPUT.PUT_LINE을 통해 출력됩니다.

Oracle의 Procedure는 복잡한 로직을 데이터베이스 내에서 효율적으로 처리할 수 있도록 도와주는 강력한 도구입니다.

728x90
반응형

'DB' 카테고리의 다른 글

SQLite 암호화 방식: OFB 모드와 CCM 모드의 차이점  (0) 2024.11.14
Oracle SQL*Loader sqlldr  (1) 2024.11.13
Oracle INDEX  (0) 2024.11.13
Oracle Trigger  (1) 2024.11.13
Oracle INNER JOIN, OUTER JOIN  (0) 2024.11.13

+ Recent posts