Witam,
Z racji ograniczeń triggera w związku z tworzeniem nowych tabel zastanawiam się czy jest możliwość takiego rozwiązania..
Tworzę trigger, który wywołuje w sobie procedure, która otrzymuje jako parametr datę z operacji triggera..
DELIMITER //
CREATE TRIGGER createTableWyniki AFTER INSERT ON zawodynazwa
FOR EACH ROW
BEGIN
#SET @data = (SELECT YEAR(dataZawody) FROM zawodynazwa WHERE dataZawody = NEW.dataZawody);
CALL procCreateTableWyniki(NEW.dataZawody);
END//
DELIMITER ;
a procedura ma za zadanie utworzyć nową tabele, która w nazwie tabeli ma mieć przekazany wcześniej rok, coś na wzór - wyniki_2013
(tylko tutaj chyba trzeba skorzystać z polecenia PREPARE do utworzenia tej zmiennej tablicowej ? Dokładnie nie wiem jak to może/powinno wyglądać..)
DELIMITER //
CREATE PROCEDURE procCreateTableWyniki(IN dataORG CHAR(10))
BEGIN
SET @dataMOD = (SELECT YEAR(dataZawody) FROM zawodynazwa WHERE dataZawody = dataORG); #tutaj z daty '2013-01-01' chce dalej wyciągnąć tylko rok '2013'
SET @wynikiTab = CONCAT('wyniki_',@dataMOD);
SET @sql = CONCAT('CREATE TABLE ',@wynikiTab,' (idWynik int(50) NOT NULL AUTO_INCREMENT)');
IF NOT EXISTS (SELECT * FROM lata WHERE rok = @dataMOD) THEN
PREPARE s1 from @sql;
EXECUTE s1;
END IF;
END//
DELIMITER ;
EDIT:
Po prawie dwóch godzinach myślenia nad kodem mam taki komunikat:
"Dynamic SQL is not allowed in stored function or trigger"
Co w przygotowanym poniżej kodzie może wywoływać taki komunikat? I jak sobie z tym poradzić?
Czy może trigger nie może wywoływać procedury?
Wszelka pomoc/sugestie mile widzane :)
(ps. proszę tylko o nie komentowania tego rozwiązania w stylu - "tak się nie robi, że tabela ma nazwe wyniki_2012, wyniki_2013.." bo ja o tym wiem.. ale to jest jak już wspominałem bardziej udowodnienie tego "że się da".