ich hier mit Anzeige der Fehlermeldung einige Probleme, ist das, was ich geschrieben habe:mysql Fehlermeldung auf gespeicherte Prozedur
DELIMITER go
Create procedure getusers(
IN iEmailAddress varchar(30),
IN iPassword varchar(30))
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
-- this one is for checking the empty email address and it suppose to
-- display an error message.
Select EmailAddress from users
where not exists(select EmailAddress
from users where EmailAddress=iEmailAddress
SIGNAL SQLSTATE VALUE '99999'
SET MESSAGE_TEXT = 'Email Address does not exists';
)
End
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
-- this one is for checking the empty password and it suppose to
-- display an error message.
Select Password from users
where not exists(select Password
from users where Password=iPassword
SIGNAL SQLSTATE VALUE '99999'
SET MESSAGE_TEXT = 'Password does not exists';
)
End
BEGIN
Select EmailAddress, Password,Salt,RoleID,UserID from users
where EmailAddress = iEmailAddress and PASSWORD = iPassword;
End
go
DELIMITER ;
Ich habe eine Fehlermeldung, die besagt:
MySQL sagte: Dokumentation 1064 - Sie haben einen Fehler in Ihrer SQL-Syntax; das Handbuch überprüfen, die für die richtige Syntax zu Ihrem MySQL-Server-Version entspricht in der Nähe von 99999 bedeutet ‚ SET MESSAGE_TEXT =‚E-Mail-Adresse ‚SIGNAL SQLSTATE VALUE‘ zu verwenden, nicht‘in Zeile 10"
Ich habe diesen Link verwendet Referenzen: http://dev.mysql.com/doc/refman/5.7/en/signal.html
denken müssen Sie ein ',' am Ende jedes 'SIGNAL SQLSTATE VALUE‚99999'' Sie benötigen in der Regel eine im. Zeilenende in mysql-Prozeduren Überprüfen Sie auch die Position der Klammern - das schließende br Acket für die "Existieren" -Klausel sollte nach der WHERE-Klausel ich denke, nicht nach der "SET" -Anweisung sein? – ADyson
Neben Syntaxproblemen ist hier noch etwas mehr falsch. 'EXIT HANDLER' ist für ** das Abfangen ** von Ausnahmen, nicht ** für das Werfen **, und die Abfragen scheinen keinen sinnvollen Zweck zu erfüllen, wobei beide offensichtlich die gesamte Tabelle in der äußeren Abfrage scannen (oder bei am besten, höchst zweideutig). Was ist das gewünschte Verhalten hier genau? –
Ich habe versucht, diese DELIMITER go Prozedur getusers (IN iEmailAddress varchar (30)) BEGIN DECLARE EXIT HANDLER FÜR SQLEXCEPTION Wählen Sie EmailAddress von Benutzern, wo nicht existiert (wählen Sie EmailAddress von Benutzern, wo EmailAddress = iEmailAddress); BEGIN SIGNAL SQLSTATE VALUE '99999' SET MESSAGE_TEXT = 'Email Adresse existiert nicht'; ENDE; Ende gehen DELIMITER; Aber als ich versucht habe, call getusers ('[email protected] ') anzurufen, wird keine Fehlermeldung angezeigt, sondern stattdessen die gesamten E-Mail-Adressdaten –