IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

CREATION DE TABLES PAR TRIGGER ou PROCEDURE STOCKEE


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de kimausoleil
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2004
    Messages : 126
    Par défaut CREATION DE TABLES PAR TRIGGER ou PROCEDURE STOCKEE
    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

  2. #2
    Membre confirmé Avatar de kimausoleil
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2004
    Messages : 126
    Par défaut CREATION DE TABLE PAR TRIGGER/PROCEDURE STOCKEE
    Je me réponds à moi même... Il est impossible de créer une table même en appelant une procédure stockée par le biais d'un trigger...


    Sinon pour ceux que ça interresserait, voici comment créer une nouvelle table par "Procédure stockée" selon un paramètre nom table :

    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
     
    DELIMITER $$
     
    DROP PROCEDURE IF EXISTS `CREATE_HISTO`$$
     
    CREATE PROCEDURE `HISTORIQUES_NEW`(mytable VARCHAR(15))
        BEGIN
     
     
    	SET @rqt = concat('CREATE TABLE ', mytable, ' ( (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'); 
    	PREPARE myquery FROM @rqt; 
    	EXECUTE myquery; 
    	DEALLOCATE PREPARE myquery;
     
     
        END$$
     
    DELIMITER ;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 30/04/2010, 15h00
  2. creation de table par select into
    Par olaxius dans le forum Informix
    Réponses: 4
    Dernier message: 21/09/2009, 16h42
  3. Creation table dans une procedure stockee - table temporaire
    Par dehorter olivier dans le forum SQL
    Réponses: 3
    Dernier message: 27/05/2007, 11h14
  4. [T-SQL]Creation procedure stockee
    Par dasaiko dans le forum Sybase
    Réponses: 4
    Dernier message: 24/08/2006, 17h01
  5. [procedure stockee] - Dupliquer une table et son contenu
    Par captusite dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 14/01/2006, 13h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo