HTTP 200 OK

Memento mori & Carpe diem

oracle DB

PLSQL 프로시저와 트리거 간단 정리

sjoongh 2022. 3. 4. 17:46

PL SQL

SQL을 확장한 절차적인 언어로 오라클에서 제공,
쿼리문을 하나씩 수행하는 SQL과 다르게
프로시져, 트리거를 통해 반복적으로 수행할 수 있습니다.


(DECLARE) : 변수,상수,커서, 사용자 지정 예외 선언부

BEGIN : SQL문장, PL/SQL제어문장

(EXCEPTION) : 에러발 생시 수행될 액션

END

서브프로그램 : 매개변수를 취할 수 있다. 호출할 수 있는 이름이있다
서브프로그램 종류 : procedure, function

 

procedure : 어떤 작업을 수행하기 위해 사용, 리턴값이 없음
function : 값을 계산하기 위해 함수 사용, 리턴값 존재

  • 함수와 프로시져 차이는 리턴값의 유무
  • 프로시저는 수행하는 절차가 목적이 되어 리턴값이 없으며
  • 함수는 어떠한 결과를 도출해 내는 것이 목적이기 때문에 리턴값이 존재

 

anonymous : 이름이 없는 블록

  • IN(default) : 호출되는 서브프로그램으로 값을 전달하기 위해 사용
  • OUT : 서브프로그램으로 호출자에게 값을 반환
  • INPUT : 호출되는 서브프로그램에 초기값 전달 후 호출자에게 갱신된값 반환
    변수는 블록이나 서브프로그램 안으로 들어갈 때마다 초기화 된다.
  • 바인드변수 : 호스트환경에서 생성되어 데이터를 저장하므로 호스트 변수라고도 함 variable 키워드로 생성, 화면에 출력하여 확인하기 위해 사용

 

프로시저란?
프로시저 문제는 쉽게 설명해서 호출할때마다 컴파일하는 방식과 미리 컴파일된 방식이다.
즉 프로시저는 동일한 동작을 수행하는 쿼리문을 자주 사용해야 할 때 효율이 좋습니다.
SQL뿐만 아니라 IF문이나 WHILE문이등 제어문이나 반복문을 구현가능
DB내에 미리 컴파일되어 저장되므로 필요할떄마다 매번 다시 사용가능

  • 저장 프로시저는 spring batch를 활용해 java쪽에서 생성해 사용할 수도 있다.
-- 실행 형식
execute 프로시저명
exec 프로시저명(값, 값...)

1. 저장 프로시저 (procedure)
MS-SQL에서는 필수 사항으로 (NET(c# , ASP.NET) 연동시 의무적으로 강제
[자주 사용되는 쿼리문]을 [모듈화] 시켜서 [필요할 때마다 호출 : parameter 사용]해서 사용하는 방법, 프로시져 또는 사용자 함수안에서 프로그램적인 제어가 가능

 

프로시저에서 사용되는 두가지 parameter 유형
1.input parameter (default) 반드시 실행할때 값을 받아야 한다
2.output parmeter 명시해서 output 써주고 입력값을 넣지 않아도 된다

 

바인드변수 생성

  • variable : out이 있는 프로시져에서 호출
  • 메모리에 만들어짐
  • NUMBER 는 크기를 지정하지 않는다.
  • variable v_name varchar2(20); variable v_age NUMBER;

 

사용자 입력 예제

-- 사용자 입력(단수)를 받아 구구단 출력 DECLARE vdan NUMBER(1) := &dan &은 사용자 입력
DECLARE
    answer number(1) := &dan;
begin
    for i in 1..9 loop
        DBMS_OUTPUT.PUT_LINE(answer || ' * ' || i || ' = ' || answer*i );
    end loop;
end;

트리거 : DML(INSERT, UPDATE, DELETE) 명령어가 실행될때 수행되는 묵시적 PROCEDURE(프로시저)이다.


한 테이블에서 어떠한 값이 입력되었을 때 자동으로 다른 테이블의 데이터가 변경되고자 할 때 사용한다. INSERT,UPDATE,DELETE 가 실행되기 전/후 에 원하는 이벤트 등을 넣어서 자동으로 유용하게 쓰는것.


이런 이유로 트리거를 사용자가 직접 실행시킬 수는 없다.

--BEFORE : 테이블에서 DML 실행되기 전에 트리거가 동작
--AFTER :  테이블에서 DML 실행후에 트리거 동작
CREATE TRIGGER trigger_name
timing[BEFORE|AFTER] event[INSERT|UPDATE|DELETE]
ON table_name
    [FOR EACH ROW]
    [WHEN conditions]
BEGIN
    statement  --부분이 실행
END

데이터베이스 튜닝 : 데이터베이스 튜닝이란 데이터베이스의 응용, 데이터베이스 자체, 운영체제의 조정 등을 통해 최적의 자원으로 최적의 성능을 얻을 수 있도록 개선하는 작업을 말한다.