1분마다 새로 수집된 데이터를 다른 테이블에 insert하는 이벤트를 등록하고자 합니다.
작성한 쿼리는 다음과 같습니다.
CREATE EVENT if NOT EXISTS event_every1minute_infotable
ON SCHEDULE EVERY '1' MINUTE STARTS '2024-09-05 14:00:02'
DO begin
-- 변수 선언
declare inserted_count int;
declare deleted_count int;
-- 실시간으로 쌓이는 테이블에서 2초 전 데이터 메인 테이블로 INSERT
insert into infotable_minute
select *
from envinfotable
where TIME = DATE_FORMAT(DATE_SUB(CURTIME(), INTERVAL 2 second), '%H%i%s');
SET inserted_count = row_count();
-- INSERT 된 데이터가 없을 경우 이상 발생 로그 기록
if inserted_count = 0 then
insert into event_logs_001(event_name, event_type, event_rows, event_table, event_time)
values('event_every1minute_infotable', 'insert', inserted_count, '이상 발생 infotable_minute', now());
else
-- event_logs_001에 insert한 데이터의 개수 및 정보 INSERT
insert into event_logs_001(event_name, event_type, event_rows, event_table, event_time)
values('event_every1minute_infotable', 'insert', inserted_count, 'infotable_minute', now());
-- envinfotable에서 infotable_minute 테이블로 이관된 데이터 삭제
delete
from envinfotable
where TIME = DATE_FORMAT(DATE_SUB(CURTIME(), INTERVAL 2 second), '%H%i%s');
SET deleted_count = row_count();
-- 삭제된 데이터가 없을 경우 이상 발생 로그 기록
if deleted_count = 0 then
insert INTO event_logs_001(event_name, event_type, event_rows, event_table, event_time)
values('event_every1minute_infotable', 'delete', deleted_count, '이상 발생 infotable_minute', now());
else
-- event_logs_001에 delete한 데이터의 개수 및 정보 INSERT
insert into event_logs_001(event_name, event_type, event_rows, event_table, event_time)
values('event_every1minute_infotable', 'delete', deleted_count, 'infotable_minute', now());
end if;
end if;
end
해당 쿼리에서는 /* SQL 오류 (1064): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 5 */ 오류가 뜹니다. DO 이후의 declare가 원인이라고 짐작은 해봤는데, 정확한 사유와 해결방안을 모르겠습니다.
스케줄 시간과 insert할 테이블 위치만 다를 뿐 동일한 실행 쿼리의 이벤트는 이미 등록이 되어 있어 더 영문을 모르겠습니다...(해당 이벤트는 1일 단위, 24시간 주기 테이블입니다.)
이에 관하여 선배님들의 혜안을 빌리고 싶습니다.
-- DELIMITER 처리하세요. DELIMITER $$ CREATE EVENT if NOT EXISTS event_every1minute_infotable ON SCHEDULE EVERY '1' MINUTE STARTS '2024-09-05 14:00:02' DO begin end $$ DELIMITER ;