test d'une procédure stockée dans MySql Workbench
J'ai une procédure stockée Insert où je suis insérer dans les 2 tables. La deuxième table à l'aide de la Last_Insert_ID de la première table. Voici ma procédure stockée:
DELIMITER $$
CREATE DEFINER=`root`@`%` PROCEDURE `new_user_create`(
IN oFarmName varchar(45),
IN oFirstName varchar(45),
IN oAddress1 varchar(45),
IN oCity varchar(45),
IN oState varchar(45),
IN oZip varchar(45),
IN oCountry varchar(45)
)
BEGIN
insert into intelliair.individual
( FarmName, FirstName)
values ( oFarmName, oFirstName);
insert into intelliair.address
(IndividualID, Address1, City, State, Zip, Country)
Values (Last_Insert_ID(), oAddress1, oCity, oState, oZip, oCountry);
END
Ici est de savoir comment je suis en train de tester la requête MySql workbench:
call new_user_create(@myFarm, @MyName, @MyAddress, @MyCity, @MyState, @MyZip, @MyCountry)
Il y a erreur que je reçois est: "Colonne Adresse1 ne peut pas être null"
Où vais-je wronng? Est-il dans la procédure stockée? Ou la façon dont je l'appelle?
Vous devez vous connecter pour publier un commentaire.
"Colonne Adresse1 ne peut pas être null" indique que le
intelliair.address.Address1
champ doit être défininot null
.Et, je ne pense pas que vous pré valeur définie pour
@MyAddress
avant de passer à la procédure stockée.Sauf indication contraire, il est traité comme
NULL
et donc l'erreur est levée.De la croix-vérifier les valeurs avant l'appel de la procédure stockée comme :
Mise à jour de 1:
Vous pouvez appeler la procédure stockée en saisissant directement les valeurs pour chacun des paramètres.
Exemple:
call my_sp( 'value1', 'value2', .. )
.L'exception est levée par un INSERT (ou mise à JOUR) l'état, qui consiste à attribuer une valeur NULL dans une colonne nommée
Address1
déclaréNOT NULL
.L'explication la plus probable, à partir de ce que vous montrez, c'est que la valeur passée dans le oAddress1 paramètre est NULL, et l'exception est levée par la deuxième instruction INSERT.
L'explication la plus probable est donc que lors de l'appel de la procédure est faite, le
@MyAddress
variable utilisateur n'est pas d'attribuer une valeur.(Vous pouvez le vérifier il n'y a pas un
Address1
colonne sur la intelliair.table individuelle, ou que, s'il en est un, il n'est pas défini commeNOT NULL
.)(Il ya aussi une possibilité que ce n'est pas l'une de vos déclarations que de jeter l'exception, mais plutôt un appel récursif de l'instruction SQL, comme une instruction INSERT dans une AVANT de les INSÉRER POUR CHAQUE LIGNE de déclenchement.)