uncle buzz | Bonjour,
j'ai un problème avec une procédure stockée sous MYSQL
Code :
- Version du serveur: 5.0.45-community-nt
- Version du protocole: 10
|
J'ai une table dans laquelle je stocke des données temporairement (pas une table temporaire), puis lorsque je veux valider mes données, je veux lancer une procédure stockée qui copie les données de ma première table vers une autre en y ajoutant quelques infos supplémentaire lors de cette validation.
Je passe donc en paramètre l'id de mon enregistrement à copier à ma procédure stockée qui enregistre ses champs dans des variables, variables que j'utilise dans une requète d'insertion dans l'autre table.
Hors j'ai des champs qui refusent la valeur NULL, et malgré qu'aucun de mes champs ne soient nuls, lors de l'exécution de ma procédure, je reçoit l'erreur suivante : Code :
- #1048 - Column 'commande_internet' cannot be null
|
Mon SELECT qui remplit les variables ne me renvoi aucune valeur NULL lorsque je l'exécute directement.
Voici à quoi ressemble tout ce petit monde :
Code :
- CREATE TABLE `commandes_temporaires` (
- `id_commande_temporaire` int(10) unsigned NOT NULL auto_increment,
- `commentaire_commande` varchar(512) character set utf8 collate utf8_bin default NULL,
- `commande_internet` tinyint(1) NOT NULL default '0',
- `id_destinataire` int(10) unsigned NOT NULL,
- `id_auteur` tinyint(3) unsigned NOT NULL,
- `id_responsable` tinyint(3) unsigned NOT NULL,
- `id_affaire` int(10) unsigned NOT NULL,
- `livraison_commande` tinyint(1) NOT NULL,
- PRIMARY KEY (`id_commande_temporaire`),
- KEY `FK_commandes_destinataire` (`id_destinataire`),
- KEY `FK_commandes_auteur` (`id_auteur`),
- KEY `FK_commandes_responsable` (`id_responsable`),
- KEY `FK_commandes_id_affaire` (`id_affaire`)
- ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
- --
- -- Contenu de la table `commandes_temporaires`
- --
- INSERT INTO `commandes_temporaires` (`id_commande_temporaire`, `commentaire_commande`, `commande_internet`, `id_destinataire`, `id_auteur`, `id_responsable`, `id_affaire`, `livraison_commande`) VALUES
- (1, 'test', 0, 2, 1, 1, 13, 1);
|
table d'arrivée :
Code :
- CREATE TABLE `commandes` (
- `id_commande` int(10) unsigned NOT NULL auto_increment,
- `date_commande` date default NULL,
- `reference_commande` char(13) character set utf8 collate utf8_bin default NULL,
- `envoyee` tinyint(1) NOT NULL default '0',
- `cloture_commande` tinyint(1) NOT NULL default '0',
- `reference_confirmation_de_commande` varchar(32) character set utf8 collate utf8_bin default NULL,
- `commentaire_commande` varchar(512) character set utf8 collate utf8_bin default NULL,
- `commande_internet` tinyint(1) NOT NULL default '0',
- `commande_complete` tinyint(1) NOT NULL default '0',
- `id_destinataire` int(10) unsigned NOT NULL,
- `id_auteur` tinyint(3) unsigned NOT NULL,
- `id_responsable` tinyint(3) unsigned NOT NULL,
- `id_affaire` int(10) unsigned NOT NULL,
- `livraison_commande` tinyint(1) NOT NULL,
- PRIMARY KEY (`id_commande`),
- KEY `FK_commandes_destinataire` (`id_destinataire`),
- KEY `FK_commandes_auteur` (`id_auteur`),
- KEY `FK_commandes_responsable` (`id_responsable`),
- KEY `FK_commandes_id_affaire` (`id_affaire`)
- ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
|
et la procédure :
Code :
- drop procedure if exists validate_commande $$
- CREATE PROCEDURE validate_commande ( id_commande_temporaire int(10) )
- BEGIN
- DECLARE id_destinataire, id_auteur, id_responsable, id_affaire int;
- DECLARE commentaire_commande varchar(512);
- DECLARE commande_internet bool;
- select
- `commentaire_commande` ,
- `commande_internet` ,
- `id_destinataire` ,
- `id_auteur` ,
- `id_responsable` ,
- `id_affaire`
- into
- commentaire_commande,
- commande_internet,
- id_destinataire,
- id_auteur,
- id_responsable,
- id_affaire
- from `commandes_temporaires` where `id_commande_temporaire` = id_commande_temporaire LIMIT 1;
- INSERT INTO `commandes` (
- `date_commande` ,
- `reference_commande` ,
- `commentaire_commande` ,
- `commande_internet` ,
- `id_destinataire` ,
- `id_auteur` ,
- `id_responsable` ,
- `id_affaire`
- )
- VALUES (
- date( now( ) ) ,
- 'Tb',
- commentaire_commande,
- commande_internet,
- id_destinataire,
- id_auteur,
- id_responsable,
- id_affaire
- );
- END$$
|
et enfin l'appel :
Code :
- call validate_commande( 1 )
|
Il semblerait que ma requete SELECT ne remplisse pas les variables, pourtant je ne voit pas où est la différence avec les docs et autres exemples que j'ai pu trouver sur le net.
Quelqu'un saurait-il où est mon erreur ?
Merci Message édité par uncle buzz le 17-04-2008 à 20:47:15
|