Voilà mon problème : j'aimerai lors de l'insertion dans une table historique, créer la table historique_AAAA selon l'année si elle n'existe pas et en insérer une copie dans cette nouvelle table !

Voici mon trigger :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
DELIMITER $$
 
CREATE
 
    TRIGGER `HISTORIQUES` AFTER INSERT ON `historique`
    FOR EACH ROW BEGIN
 
	DECLARE MYTABLE varchar(15);
	DECLARE ANNEE varchar(4);
 
	DECLARE EOF INT default 0;	
	DECLARE QUERY_SAISON CURSOR FOR SELECT `hsannee` FROM `histosaisons` WHERE `hsannee` = NEW.`chrannee`;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET EOF = 1;
 
	SET MYTABLE = 'historique_' + NEW.`chrannee`;
 
	/* ON OUVRE LA REQUETE */
	OPEN QUERY_SAISON;
 
	WHILE EOF <> 1 DO
 
		FETCH QUERY_SAISON INTO ANNEE;
 
	END WHILE;
 
	CLOSE QUERY_SAISON;
 
	/* Si pas d'année */
	IF ANNEE IS NULL OR ANNEE='' THEN
 
		insert into `histosaisons` (`hsannee`) values (NEW.`chrannee`);
 
		/* appel de ma procédure stockée car il semble qu'il est impossible de créer une table dans le trigger */
		call HISTORIQUES_NEW(MYTABLE);
 
	END IF;
 
	/* On insére dans la table historique_AAAA : sauf que non, ça ne marche pas  !*/
	insert into historique_NEW.`chrannee` (`chrnum`, `chrannee`, `chrdat`, `chrmon`)
	values (NEW.`chrnum`, NEW.`chrannee`, NEW.`chrdat`, NEW.`chrmon`);
 
    END$$
 
DELIMITER ;
Qui appelle ma Procédure stockée pour tenter de créer ma nouvelle table !!!

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
DELIMITER $$
 
CREATE
    PROCEDURE HISTORIQUES_NEW( MY_TABLE varchar(50) )
    BEGIN
 
	Execute statement 'create table historique_' + MY_TABLE + ' (chrlig int(10) NOT NULL auto_increment, chrnum int(10) default NULL, chrannee varchar(4) default NULL,chrdat varchar(10) default NULL, chrmon decimal(19,4) default NULL, PRIMARY KEY  (chrlig), KEY chrannee (chrannee), KEY chrdat (chrdat), KEY chrmod (chrmod), KEY chrmon (chrmon)) ENGINE=InnoDB DEFAULT CHARSET=latin1;';
 
    END$$
 
DELIMITER ;


Alors est-ce possible de créer de nouvelles tables par les triggers ou les procédures stockées ?

Merci