MySQL Stored Program   MySQL 저장 프로그램

(2019-07-08)

스토어드 프로그램, 저장 루틴, Stored Procedure, 스토어드 프로시저, MySQL Event


1. MySQL Stored Program

  ㅇ 나중에 절차적으로 실행할 수 있도록 서버 측에 저장되는 프로그램들을 총칭
     - Stored Function  : 수식에 사용되며 계산결과 값 만을 반환
     - Stored Procedure : 결과 세트를 생성 및 반환
     - Trigger          : 테이블이 INSERT,DELETE,UPDATE 될 때에 만 실행됨
     - Event            : 스케줄러에 저장되고 시간에 의해 실행됨

  ㅇ 모두 동일한 문법으로 작성 처리됨

  ㅇ 실행 방법
     - 저장 함수 실행        : `SELECT 문` 내에서 호출 실행
     - 저장 프로시저 실행    : `CALL 프로시저명;`으로 호출 실행
     - 이벤트 실행           : `이벤트 스케줄러`를 가동시켜 그에의해 실행

     * 외부 텍스트파일 *.sql 실행 : SOURCE 외부파일명; 

  ㅇ 현재 등록된 Procedure/Function 확인 방법 
     - Stored Procedure : SHOW PROCEDURE STATUS;
     - Stored Function  : SHOW FUNCTION STATUS;


2. Event 및 Event Scheduler이벤트 스케줄러 가동 여부 확인 : SHOW VARIABLES LIKE 'event_scheduler';
  ㅇ 서버 기동시 강제 가동          : (my.ini 또는 my.cnf) [mysqld] event_scheduler = ON
     - 서버 기동시, 이벤트 스케줄러 스레드가 자동 가동됨
  ㅇ 시스템 변수에 의한 가동        : SET GLOBAL EVENT_SCHEDULER = ON;
  ㅇ 현재 등록된 이벤트 확인
     - 등록된 이벤트들 확인 : SHOW EVENTS;
     - 마지막 수행 시간 확인 : INFORMATION_SCHEMA.EVENTS 테이블 내 LAST_EXECUTED 칼럼
  ㅇ 이벤트 생성 例) 
       
DROP EVENT IF EXISTS periodic_stat;

CREATE EVENT 이벤트명
    ON SCHEDULE
        EVERY 30 MINUTE            -- 매 30분 마다
          -- 1회 만 실행의 경우에는, 
          -- EVERY 절 대신에. => AT 절을 사용 함
	STARTS CURRENT_TIMESTAMP   -- 현재 시각(CURRENT_TIMESTAMP)부터 시작 함
          -- 또는, SRART '2018-05-15 00:00:00' END '2018-05-15 02:00:00' 처럼
          -- 직접적으로 시작 끝의 시각을 명시하는 것도 가능
          -- 또는, STARTS '2019-04-08 19:30:00' ENABLE 처럼
          -- 시작 시각을 명시하고 그 시각부터 주기적으로 시행하는 것도 가능
    DO
	CALL 함수명();             -- 별도수행 함수에 의한 호출 실행
          -- 단지 1개 쿼리문 또는 별도 프로시저 실행
          -- 또는 BEGIN ~ END에 의한 복합절도 가능
3. 주요 문법 ㅇ 주석 (comment) : /* */, #, -- (3 가지) ㅇ 제어문 - IF
IF expression THEN commands
[ELSEIF expression THEN commands ....]
[ELSE commands]
END IF;
- CASE 문
CASE expression
    WHEN value THEN statements
    [WHEN value THEN statements]
    [WHEN value THEN statements]
    .
    .
    [ELSE statements]
END CASE;
반복문 - LOOP ~ END (빠져나가기 : LEAVE, 처음으로가기 : ITERATE) - REPEAT ~ UNTIL - WHILE ㅇ CURSOR - 1 이상의 결과 set를 return 하기 위해 사용 - DECLARE cname CURSOR FOR SELECT ... . OPEN : 커서를 사용하기 위해 fetch 전에 반드시 처리 . FETCH : 커서가 다음 row 로 이동 . CLOSE : 커서를 닫아줌

MySQL
   1. MySQL   2. 마리아 DB   3. MySQL 서버   4. 저장 루틴   5. MySQL 백업   6. MySQL 계정   7. MySQL 활용 (기타)   8. MySQL 함수   9. Prepare 문  


Copyrightⓒ written by 차재복 (Cha Jae Bok)               기술용어해설 후원
"본 웹사이트 내 모든 저작물은 원출처를 밝히는 한 자유롭게 사용(상업화포함) 가능합니다"