DB/SQL

OBJECT - PROCEDURE

제주니어 2022. 9. 11. 19:21

PROCEDURE

  • PROCEDURE는 오라클에서 제공하는 객체로 PL/SQL 문을 저장하여 필요할 때마다 복잡한 구문을 다시 입력할 필요 없이 간단하게 호출해서 실행 결과를 얻을 수 있다.
  • 함수는 특정 연산을 수행한 뒤 결과 값을 반환하지만 프로시저는 특정한 로직을 처리하기만 하고 결과 값은 반환하지 않는 서브 프로그램입니다.

PROCEDURE 생성

  • PROCEDURE는 CREATE 구문을 사용해서 생성한다.
  • PROCEDURE를 실행할 때는 EXCUTE(EXEC) 명령을 사용합니다.
CREATE [OR REPLACE] PROCEDURE 프로시저명
(
    매개변수 1 [IN|OUT] 데이터 타입 [:= DEFAULT 값],
    매개변수 2 [IN|OUT] 데이터 타입 [:= DEFAULT 값],
    ...
)
IS [AS]
    선언부
BEGIN
    실행부
[EXCEPTION
    예외 처리부]
END [프로시저명];
/
  • PROCEDURE는 매개변수를 받을 수 있는데 선언하는 방법에 따라 역할이 다르다.
구분 설명
IN 사용자로부터 값을 입력받아 PROCEDURE로 전달해 주는 역할을 한다. (기본값)
OUT PROCEDURE에서 호출 환경으로 값을 전달하는 역할을 한다.

매개변수가 있는 프로시저

-- 사번을 입력 받아서 해당하는 사번의 사원을 삭제하는 프로시저 생성
CREATE PROCEDURE DEL_EMP_ID (
    P_EMP_ID EMPLOYEE.EMP_ID%TYPE
)
IS 
BEGIN
    DELETE FROM EMPLOYEE
    WHERE EMP_ID = P_EMP_ID;
END DEL_EMP_ID;
/

-- 프로시저 실행(매개 변수로 매개 값을 전달해야 한다.)
--EXEC DEL_EMP_ID; -- 에러 발생
EXEC DEL_EMP_ID('200');

SELECT * FROM EMPLOYEE;
EXEC DEL_EMP_ID('&사번');

IN/OUT 매개변수가 있는 프로시저

-- 사번을 입력 받아서 해당하는 사원의 정보를 전달하는 프로시저 생성
CREATE PROCEDURE SELECT_EMP_ID (
    P_EMP_ID IN EMPLOYEE.EMP_ID%TYPE,
    P_EMP_NAME OUT EMPLOYEE.EMP_NAME%TYPE,
    P_SALARY OUT EMPLOYEE.SALARY%TYPE,
    P_BONUS OUT EMPLOYEE.BONUS%TYPE
)
IS
BEGIN
    SELECT EMP_NAME, SALARY, BONUS
    INTO P_EMP_NAME, P_SALARY, P_BONUS
    FROM EMPLOYEE
    WHERE EMP_ID = P_EMP_ID;
END;
/

-- * 바인드 변수(VARIABLE 또는 VAR)
VARIABLE VAR_EMP_NAME VARCHAR2(30);
VARIABLE VAR_SALARY NUMBER;
VAR VAR_BONUS NUMBER;

-- 변수 자체를 참고하려면 변수명 앞에 ':' 을 붙여준다. 
EXEC SELECT_EMP_ID('205', :VAR_EMP_NAME, :VAR_SALARY, :VAR_BONUS);

-- 바인드 변수의 값을 출력하기 위해서 PRINT 명령을 사용한다. 
PRINT VAR_EMP_NAME;
PRINT VAR_SALARY;
PRINT VAR_BONUS;

-- PL/SQL 블럭에서 사용되는 바인드 변수에 값을 자동으로 출력한다. 
SET AUTOPRINT ON;

-- 프로시저 호출 뒤에 주석을 작성하면 에러 발생
EXEC SELECT_EMP_ID('&사번', :VAR_EMP_NAME, :VAR_SALARY, :VAR_BONUS);

바인드 변수

  • SQL 구문상에서 조건절에 들어가는 값으로 변수를 사용하는 것을 바인드 변수를 사용한다고 말한다.
  • 키워드 VARIABLE을 이용하며, SQL문이나 PL/SQL블록에서도 사용 가능하다.
  • PL/SQL블록이 실행된 후에도 액세스가 가능하다.
  • print명령을 이용하여 출력이 가능하다.
  • :(콜론) 을 붙여 사용한다.

PROCEDURE 삭제

  • PROCEDURE 삭제 시 DROP 구문을 사용해서 삭제한다.
DROP PROCEDURE 프로시저명;

'DB > SQL' 카테고리의 다른 글

OBJECT - CURSOR  (0) 2022.09.13
OBJECT - FUNCTION  (0) 2022.09.12
OBJECT - SYNONYM  (0) 2022.09.10
OBJECT - INDEX  (0) 2022.09.09
OBJECT - SEQUENCE  (0) 2022.09.08