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시간 주기 테이블입니다.)
이에 관하여 선배님들의 혜안을 빌리고 싶습니다.