프로시저란
- 프로시저란 SQL Server에서 제공하는 프로그래밍 기능이다.
- 일반 함수가 하는 것과 거의 비슷한 일을 하고 개념도 비슷하다. 다만 이것을 DB서버측에 위치한다.
- 특정 작업을 수행하는, 이름이 있는 PL/SQL BLOCK 이다.
- 매개 변수를 받을 수 있고, 반복적으로 사용 할 수 있는 BLOCK 이다.
- 보통 연속 실행 또는 구현이 복잡한 트랜잭션을 수행하는 PL/SQL BLOCK을 데이터베이스에 저장하기 위해 생성한다.
- 쿼리문을 마치 하나의 메서드 형식으로 만들고 어떠한 동작을 일괄적으로 처리하는 용도로 사용된다.
- 여러 개의 칼럼을 조회하고 여러 개의 테이블을 조인하고 거기에 조건까지 넣어줌으로써 하나의 쿼리를 만드는데 엄청나게 긴 쿼리문이 생기게 된다.
- 이러한 여러개의 쿼리를 사용할 때마다 긴 쿼리문을 써야 한다면 엄청나게 불편할 텐데 이를 프로시저에 저장하고 저장된 프로시저를 호출하여 프로그래밍을 하는것이 훨씬 효율적이다.
- 프로시져의 경우는 요청 -> 컴파일 -> 실행 -> 응답 의 순서가 되고, 요청이 5번이라면 요청 -> 실행(메모리) -> 응답 이 된다.
저장 프로시저의 장점
- DB 서버측에 저장 프로시져로 넣어놓으면 일관성 있고, 관리가 쉬워지며 유지보수가 용이하다.
- 하나의 요청으로 여러 SQL문을 실행 할 수 있습니다.
- 네트워크 소요 시간을 줄일 수 있습니다.
- 개발 업무를 구분해 개발 할 수 있습니다.
저장 프로시저의 단점
- 처리 성능이 낮습니다.
- 디버깅이 어렵습니다.
- DB 확장이 매우 힘듭니다.
Parameter
- 실행환경과 program사이에 값을 주고 받는 역할
- 블록 안에서의 변수와 똑같이 일시적으로 값을 저장하는 역할
- Parameter의 타입
- IN : 실행환경에서 program으로 값을 전달
- OUT : program에서 실행환경으로 값을 전달
- INOUT : 실행환경에서 program으로 값을 전달하고, 다시 program에서 실행환경으로 변경된 값을 전달
사용방법
[Syntax]
CREATE OR REPLACE procedure name
IN argument
OUT argument
IN OUT argument
IS
[변수의 선언]
BEGIN --> 필수
[PL/SQL Block]
-- SQL문장, PL/SQL 제어 문장
[EXCEPTION] --> 선택
-- error가 발생할 때 수행하는 문장
END; --> 필수
CREATE OR REPLACE PROCEDURE update_sal
/* IN Parameter */
(v_empno IN NUMBER)
IS
BEGIN
UPDATE emp
SET sal = sal * 1.1
WHERE empno = v_empno;
COMMIT;
END update_sal;
/
- 프로시져의 이름은 update_sal이고
- 프로시져 update_sal은 사번(v_empno)를 입력받아서 급여를 update시켜주는 sql문이다.
- 프로시져를 끝마칠때에는 항상 "/"를 지정한다.
- EXECUTE 문을 이용해 프로시져를 실행한다.( EXECUTE update_sal(7369); )
REFERENCES