Projelerden bir tanesinde loglar aylık isimlendirilen tablolarda tutuluyor. Bir stored procedure yardımı ile logdaki hataların sayısını almak istediğim zaman tablo ismi dinamik olduğu için dinamik sql yazmak gerekti. Mysql ile dinamik sql oluşturmak için prepared statement’lar kullanılıyormuş.
Son 1 saat içerisinde Fail olmuş logların sayısını alan procedure şöyle birşey oluyor bu durumda:
DELIMITER $$
DROP PROCEDURE IF EXISTS `project`.`proc_error_logs`$$
CREATE DEFINER=`project`@`%` PROCEDURE `proc_error_logs`()
BEGIN
set @dyn_sql=concat('select count(*) from project_log_', date_format(now(), '%Y%m'), ' where LOG_STATUS=\'Failed\' and LOG_TIME > date_sub(now(), interval 1 hour)');
prepare s1 from @dyn_sql;
execute s1;
deallocate prepare s1;
END$$
DELIMITER ;
Prepared statement’lara parametre de geçebiliyorsunuz, sql cümlesi içerisinde ? deyip execute ifadesinde using deyip ard arda verebiliyorsunuz, şöyle:
EXECUTE s1 USING @min_val;
işinize yaraması dileğiyle…