testen Sie eine gespeicherte Prozedur in MySql-Workbench
Ich habe eine Insert-gespeicherte Prozedur, wo ich das einfügen in 2 Tabellen. Die zweite Tabelle mit dem Last_Insert_ID der ersten Tabelle. Hier ist mein sproc:
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
Hier ist, wie ich am testen der Abfrage in MySql-workbench:
call new_user_create(@myFarm, @MyName, @MyAddress, @MyCity, @MyState, @MyZip, @MyCountry)
Gibt es Fehler, die ich erhalte ist: "Spalte' Adresse1 'darf nicht null sein"
Wohin gehe ich wronng? Ist es in der sproc? Oder so wie ich bin, nannte es?
InformationsquelleAutor EB. | 2012-07-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
"Spalte 'Adresse1' kann nicht null sein" zeigt an, dass die
intelliair.address.Address1
Feld muss definiert werdennot null
.Und ich glaube nicht, dass Sie zuvor definierte Wert für
@MyAddress
vor der übergabe an die gespeicherte Prozedur.Es sei denn, es definiert wird behandelt, als
NULL
und damit ist der Fehler geworfen.Überqueren überprüfen Sie die Werte vor dem Aufruf der gespeicherten Prozedur wie :
Update 1:
Können Sie rufen Sie die gespeicherte Prozedur direkt durch Eingabe von Werten für jeden der Parameter.
Beispiel:
Auch, wenn ich entfernen Sie das @ - symbol und verwenden Sie einfach MyName als der tatsächliche Wert. Es sagt mir, dass Myname Spalte nicht vorhanden ist.
Sie können nur Eingabe der aktuellen Werte beim Aufruf, es sei denn, interessiert in Variablen. Wie
call my_sp( 'value1', 'value2', .. )
.Danke. Das ist mein problem gelöst!
InformationsquelleAutor Ravinder Reddy
Ausnahme, die ausgelöst durch ein INSERT (oder UPDATE) Anweisung ist die Zuweisung eines NULL-Wert an eine Spalte mit dem Namen
Address1
deklariert werdenNOT NULL
.Die wahrscheinlichste Erklärung, von dem, was Sie zeigen, ist, dass der übergebene Wert als die oAddress1 parameter NULL ist, und die Ausnahme, die ausgelöst durch die zweite INSERT-Anweisung.
Die wahrscheinlichste Erklärung HIERFÜR ist, dass beim Aufruf an die Prozedur gemacht wird, die
@MyAddress
user-variable wird kein Wert zugeordnet.(Sie können überprüfen, es ist nicht ein
Address1
Spalte auf der intelliair.einzelne Tabelle, oder, wenn es einer ist, es ist nicht definiert, wieNOT NULL
.)(Es gibt auch die Möglichkeit, dass es nicht eine Ihrer Aussagen, wirft die Ausnahme, sondern vielmehr ein Rekursives SQL-Anweisung, wie eine INSERT-Anweisung in einem BEFORE INSERT FOR EACH ROW trigger.)
InformationsquelleAutor spencer7593
InformationsquelleAutor ASR