모르지 않다는 것은 아는것과 다르다.

Database

프로시저

채마스 2022. 2. 27. 02:03

프로시저란

  • 프로시저란 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

'Database' 카테고리의 다른 글

쿼리연습 (겹치는 날짜 검사하기)  (0) 2023.04.07
SQL  (0) 2022.05.30
트랜잭션 격리수준(Isolation level)  (0) 2022.02.27
조인  (0) 2022.02.27
Spring Data Jpa Bulk Insert  (0) 2022.02.27