기능
- 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한
쿼리의 집합
- 원하는 결과물을 얻기 위해 사용할
여러 줄의 쿼리문을 한 번의 요청으로 실행하기 위한 방법
구조

- 프로시저를 만들어두면, 애플리케이션에서 여러 상황에 따라 해당 쿼리문이 필요할 때 인자 값만 전달하여 쉽게 원하는 결과물을 받아낼 수 있음
프로시저 생성 및 호출 SQL
CREATE OR REPLACE PROCEDURE 프로시저명(변수명1 IN 데이터타입, 변수명2 OUT 데이터타입) -- 인자 값은 필수 아님
IS
[
변수명1 데이터타입;
변수명2 데이터타입;
..
]
BEGIN
필요한 기능; -- 인자값 활용 가능
END;
EXEC 프로시저명; -- 호출
예시(IN)
REATE OR REPLACE PROCEDURE test( name IN VARCHAR2 )
IS
msg VARCHAR2(5) := '내 이름은';
BEGIN
dbms_output.put_line(msg||' '||name);
END;
EXEC test('규글');
출력
----
내 이름은 규글
예시(OUT)
CREATE OR REPLACE PROCEDURE test( name OUT VARCHAR2 )
IS
BEGIN
name := 'Gyoogle'
END;
DECLARE
out_name VARCHAR2(100);
BEGIN
test(out_name);
dbms_output.put_line('내 이름은 '||out_name);
END;
출력
----
내 이름은 Gyoogle
장단점
장점
- 최적화 & 캐시
- 프로시저의 최초 실행 시 최적화 상태로 컴파일, 이후 프로시저 캐시에 저장
- 이로 인하여 컴파일 작업을 거치지 않고 캐시에서 가져옴
- 유지 보수
- 작업 수정 시, 다른 작업은 건드리지 않고 프로시저 내부에서 수정만 하면 됨
- 트래픽 감소
- 클라이언트가 직접 SQL문을 작성하지 않고 프로시저명에 매개변수만 담아 전달하면 됨
- 보안
- 프로시저 내에서 참조 중인 테이블의 접근을 막을 수 있음