2020년/정처기

[2020 정보처리기사 실기]Section 08.SQl응용(프로시저, 트리거)

위지원 2020. 4. 29. 21:54

이전글

2020/04/28 - [2020년도 상반기/정처기] - [2020 정보처리기사 실기]Section 08. SQL 응용(SELECT)

프로시저

1. 프로시저?

  • 절차형 SQL을 활용하여 특정기능을 수행하는 일종의 트랜잭션 언어로, 호출을 통해 실행되어 미리 저장해 놓은 SQL작업 수행
  • Stored Procedure라고도 함
  • 시스템의 일일 마감 작업, Batch작업등에 주로 사용 
DECLARE
BEGIN
    [CONTROL] : /*조건문 또는 반복문*/
    [SQL]
    [EXCEPTION]
    [TRANSACTION] : /*수행된 데이터 작업들을 db에 적용할지 취소할지?*/
END;

 

2. 프로시저 생성 ; BODY에는 적어도 하나의 SQL을 포함

CREATE [OR PEPLACE] PROCEDURE 프로시저명(파라미터)
[지역변수]
BEGIN
	프로시저BODY;
END;

파라미터는 

IN 입력 데이터
OUT 출력 데이터
INPUT 입출력 데이터
CREAT OR REPLACE PROCEDURE emp_change_s(i_사원번호 IN INT)
IS /*변수를 사용하는 예약어 IS, 변수를 사용하지않았으므로 예약어 IS만 작성*/
BEGIN
    UPDATE 급여 SET 지급방식='S' WHERE 사원번호=i_사원번호;
    EXCEPTION 
        WHEN PROGRAM_ERROR THEN
            ROLLBACK;;
    COMMIT;
END;

 

3. 프로시저 실행

EXECUTE 프로시저명;
EXEC 프로시저명;
CALL 프로시저명;

#EXAMPLE

EXECUTE emp_change_s(32);

 

4. 프로시저 제거

DROP PROCEDURE 프로시저명;

#EXAMPLE

DROP PROCEDUTE emp_change_s;

 

 

트리거

1.트리거?

Insert, Update, Delete등 Evenet 발할 때마다 작업을 자동으로 수행되는 절차형 SQL

  • 데이터 변경 및 무결성 유지, 로그메세지 출력등에 사용
  • DCL 사용불가능, DCL포함 프로시저나 함수 호출해도 오류발생
DECLARE
EVENT
BEGIN
    [CONTROL]
    [SQL]
    [EXCPETION]
END;

 

2. 트리거 생성 ; BODY에는 적어도 하나의 SQL 포함

CREATE [OR REPLACE] TRIGGER 트리거명 [동작시기 옵션][동작 옵션] ON 테이블명
REFEPENCING [NEW|OLD] AS 테이블명
FOR EACH ROW /*각 튜플마다 적용*/
[WHEN 조건식]
BEGIN 
    트리거 BODY;
END;
  • 동작시기 옵션
    • AFTER : 변경된 후
    • BEFORE : 변경 전
  • 동작 옵션
    • INDEST, DELETE, UPDATE 중 하나
  • NEW|OLD : 트리거가 적용될 테이블의 별칭을 지정
    • NEW : 추가/수정에 참여할 튜플들의 집합(테이블)
    • OLD : 수정/삭제 전 대상이 되는 튜플들의 집합(테이블)
CREATE TRIGGER 학년정도_tri BEFORE INSERT ON 학생
REFERENCING NEW AS new_table
FOR EACH ROW
WHEN(new_table.학년 IS NULL) /*새로운 테이블에서 학년이 NULL이면 이 TRIGGER가 적용됨*/
BEGIN
	:new_table.gkrsus :='신입생';
    /*NEW 또는 OLD로 지정된 테이블 앞엔 :콜론 삽입*/
    /*저장하라는 의미로 :=를 사용하여야 함*/
END;

 

3. 트리거 제거

DROP TRIGGER 트리거명;

#EXAMPLE

DROP TRIGGER 학년정보_tri;

 

다음글

2020/04/29 - [2020년도 상반기/정처기] - [2020 정보처리기사 실기]Section 08.SQL응용(사용자 정의 함수, 커서)