주기적으로 데이터베이스의 공통된 작업을 해야할경우 클라이언트단 에서 주기적 요청을 통한 데이터 변경은 바람직하지 않다 데이터 베이스 스스로 처리하게 셋팅 해야한다.
예) 하루에 한번 특정 이벤트의 날짜를 수정 하여 재등록 할경우
/*(CURRENT_TIMESTAMP 는 현재시간 년월일시 리터럴)*/
DELIMITER $ /*SQL 종료문을 $로 대체하겟다는 선언*/
CREATE EVENT EVENTTEST /*이벤트이름 유니크여야함,64글자 제한,대소문자 구분 X*/
ON SCHEDULE
/*특정시간에 한번 실행 경우*/
/*
AT '2016-11-17 11:35:00' 처럼 특정시간 지정 가능(미래의 시간만 지정 가능)
또는
AT CURRENT_TIMESTAMP + INTERVAL 5 MINUTE + INTERVAL 30 SECOND 식으로
현재시간 에서 5분 30초 이후에 실행하게뜸 지정 가능
MINUTE 니 SECOND 말고도
YEAR|QUARTER|MONTH|DAY|HOUR|MINUTE|WEEK|SECOND|YEAR_MONTH|DAY|HOUR|MINUTE|WEEK| SECOND | YEAR_MONTH|DAY_HOUR|DAY_MINUTE| DAY_SECOND| HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND
등등 키워드를 넣어 설정할수 있고 + 를 통해 연결 가능 하다. 각각의 키워드에대해선 알아서 찾아보길.
*/
/*일적주기마다 반복 경우*/
EVERY 2 MINUTE /*2분 마다 실행, 다른 키워드 사용가능*/
STARTS '2016-11-17 11:35:00' + INTERVAL 0 MINUTE /*시작 시간을 설정하고 + 를 사용해서 인터벌을 줄수도 있다.*/
ENDS '2016-11-17 12:14:00' /*종료시간 셋팅 미입력시 무한반복*/
ON COMPLETION PRESERVE /*이벤트가 종료된후 이벤트를 남겨둘지에 대한 여부 없을경우 기본 삭제됨.*/
DO
/*실행구문*/
BEGIN
/*변수 할당 SELECT 되는 컬럼 타입과 동일하게 선언*/
DECLARE P_EVT_SEQ bigint(20);
DECLARE P_EVT_TYPE varchar(2);
DECLARE P_EVT_TITLE varchar(300);
DECLARE P_EVT_CONTENT_PC text;
DECLARE P_EVT_CONTENT_MO text;
DECLARE P_EVT_IMG_PATH_PC varchar(200);
DECLARE P_EVT_IMG_PATH_MO varchar(200);
DECLARE P_EVT_START_DT varchar(8);
DECLARE P_EVT_END_DT varchar(8);
DECLARE P_EVT_AGENT varchar(50);
DECLARE P_EVT_URL varchar(200);
/*트랜잭션 시작*/
START TRANSACTION;
/*주의 : SELECT 해온 결과를 INTO 로 변수에 할당할때 SELECT COLUMN 값이 NULL 일경우 에러발생*/
SELECT
EVT_SEQ
,EVT_TYPE
,EVT_TITLE
,EVT_CONTENT_PC
,EVT_CONTENT_MO
,EVT_IMG_PATH_PC
,EVT_IMG_PATH_MO
,DATE_FORMAT(DATE_ADD(DATE_FORMAT(EVT_START_DT,'%Y%m%d'),INTERVAL 1 DAY),'%Y%m%d') EVT_START_DT /*날짜 선택해서 하루 더하는 부분*/
,DATE_FORMAT(DATE_ADD(DATE_FORMAT(EVT_END_DT,'%Y%m%d'),INTERVAL 1 DAY),'%Y%m%d') EVT_END_DT /*날짜 선택해서 하루 더하는 부분*/
,EVT_AGENT
,EVT_URL
INTO /*변수에 할당*/
P_EVT_SEQ
,P_EVT_TYPE
,P_EVT_TITLE
,P_EVT_CONTENT_PC
,P_EVT_CONTENT_MO
,P_EVT_IMG_PATH_PC
,P_EVT_IMG_PATH_MO
,P_EVT_START_DT
,P_EVT_END_DT
,P_EVT_AGENT
,P_EVT_URL
FROM ONL_EVENT
WHERE EVT_SEQ = (SELECT EVT_SEQ FROM ONL_EVENT WHERE EVT_TYPE = 'A' ORDER BY EVT_CREATE_DT DESC LIMIT 1);
/*기존 데이터 변경*/
UPDATE ONL_EVENT
SET EVT_STATUS = 3
WHERE EVT_SEQ = P_EVT_SEQ;
/*새로운 데이터 추가*/
INSERT INTO ONL_EVENT(
EVT_TYPE
,EVT_TITLE
,EVT_CONTENT_PC
,EVT_CONTENT_MO
,EVT_IMG_PATH_PC
,EVT_IMG_PATH_MO
,EVT_START_DT
,EVT_END_DT
,EVT_STATUS
,EVT_AGENT
,EVT_URL
,EVT_CREATE_DT
)VALUES(
P_EVT_TYPE
,P_EVT_TITLE
,P_EVT_CONTENT_PC
,P_EVT_CONTENT_MO
,P_EVT_IMG_PATH_PC
,P_EVT_IMG_PATH_MO
,P_EVT_START_DT
,P_EVT_END_DT
,'2'
,P_EVT_AGENT
,P_EVT_URL
,NOW()
);
COMMIT; /*트랜잭션 종료*/
END /*실행 구문 끝*/
$ DELIMITER ; /*SQL 종료 구분자 변경*/
/*밑에껀 보너스*/
/*이벤트 목록 보기*/
SHOW EVENTS;
/*이벤트 삭제*/
DROP EVENT EVENTTEST;
/*등록된 특정 이벤트 내용보기*/
SHOW CREATE EVENT EVENTTEST;
/*이벤트를 사용하기 위한 MYSQL 셋팅 (서버가 동작중일때)*/
/*-EVENT 사용하기 */
SET GLOBAL event_scheduler = ON;
SET @@global.event_scheduler = ON;
SET GLOBAL event_scheduler = 1;
SET @@global.event_scheduler = 1;
/*-EVENT 사용하지 않기-=*/
SET GLOBAL event_scheduler = OFF;
SET @@global.event_scheduler = OFF;
SET GLOBAL event_scheduler = 0;
SET @@global.event_scheduler = 0;
2016년 11월 16일 수요일
피드 구독하기:
댓글 (Atom)
[oracle]백업및 복구
[oracle]백업및 복구 오라클 덤프 백업및 복구 윈도우 서버 기반 간단 정리 --디렉터리 조회 sqlplus 또는 dbtool 입력시작 SELECT * FROM DBA_DIRECTORIES ; --D:...
-
수십대의 서버에 특정 쉘을 실행한다거나 파일을 수정해야할경우 호스트 입력 아이디 입력 패스워드 입력은 여간 짜증나는일이 아닐수 없다. 이를 한방에 해주는 방법 teraterm 를 설치한다( putty 는 버리자 ) 예를 들면 19...
-
pom.xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId...
-
notice_state 란 이름의 체크박스가 있다 가정하고 $("input[name=notice_state]").bind("click",false); 끝.
댓글 없음:
댓글 쓰기