Czy w mysql jest mozliwe utworzenie procedury tworzącej triggery?
coś w rodzaju -
Kod
PROCEDURE insert_trigger_history (IN base VARCHAR(50),IN table VARCHAR(255))
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE va VARCHAR(255);
DECLARE coltab CURSOR FOR
SELECT column_name
FROM information_schema.columns
WHERE table_schema = base and table_name=table;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
SELECT 'Create insert triiger for table columns' AS info;
OPEN coltab;
SET @i=1;
SET @listtab ='';
SET @listnewtab ='';
SET @trigger ='';
REPEAT
FETCH coltab INTO va;
IF NOT done THEN
IF @i<>1 THEN
SET @listtab = CONCAT(@listtab,',');
SET @listnewtab = CONCAT(@listnewtab,',');
END IF;
SET @i = @i+1;
SET @listtab = CONCAT(@listtab,va);
SET @listnewtab = CONCAT(@listnewtab,'NEW.',va);
END IF;
UNTIL done END REPEAT;
CLOSE coltab;
SET @trigger = CONCAT('
TRIGGER trigger_insert_',table,' AFTER INSERT ON ',table,' FOR EACH ROW
BEGIN
INSERT INTO history_',table,' (@listtab)
VALUES (@listnewtab);
END;
');
PREPARE QUERY FROM @trigger;
EXECUTE QUERY;
DEALLOCATE PREPARE QUERY;
END//
DELIMITER;
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE va VARCHAR(255);
DECLARE coltab CURSOR FOR
SELECT column_name
FROM information_schema.columns
WHERE table_schema = base and table_name=table;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
SELECT 'Create insert triiger for table columns' AS info;
OPEN coltab;
SET @i=1;
SET @listtab ='';
SET @listnewtab ='';
SET @trigger ='';
REPEAT
FETCH coltab INTO va;
IF NOT done THEN
IF @i<>1 THEN
SET @listtab = CONCAT(@listtab,',');
SET @listnewtab = CONCAT(@listnewtab,',');
END IF;
SET @i = @i+1;
SET @listtab = CONCAT(@listtab,va);
SET @listnewtab = CONCAT(@listnewtab,'NEW.',va);
END IF;
UNTIL done END REPEAT;
CLOSE coltab;
SET @trigger = CONCAT('
TRIGGER trigger_insert_',table,' AFTER INSERT ON ',table,' FOR EACH ROW
BEGIN
INSERT INTO history_',table,' (@listtab)
VALUES (@listnewtab);
END;
');
PREPARE QUERY FROM @trigger;
EXECUTE QUERY;
DEALLOCATE PREPARE QUERY;
END//
DELIMITER;
Ewentualnie jaka jest alternatywa aby utworzyć z automatu triigery dla wszystkich tabel?
Dzięki za pomoc - bo walcze juz z tym długo.