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 구문상에서 조건절에 들어가는 값으로 변수를 사용하는 것을 바인드 변수를 사용한다고 말한다.