MariaDB 이벤트 스케줄러 등록 관련 0 1 7,685

by 천추 [MySQL] MariaDB [2024.09.05 19:05:13]


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시간 주기 테이블입니다.)

이에 관하여 선배님들의 혜안을 빌리고 싶습니다.   

by 뉴비디비 [2024.09.06 23:08:28]
-- 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 ;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입