2016-08-23 17 views
0

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

+0

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

+0

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? –

+0

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 –

Antwort

0

löste ich das Problem und die Lösung ist:

> DELIMITER go Create procedure getusers( IN iEmailAddress varchar(30), 
> IN iPassword varchar(30)) BEGIN declare checkemailcount int; declare 
> checkpasswordcount int; 
> 
> select count(emailaddress) into checkemailcount from users where 
> emailaddress = iEmailaddress; 
> 
> select count(Password) into checkpasswordcount from users where 
> Password = iPassword; 
> 
> --check if emailaddress not exists 
> 
> If(checkemailcount!=1) then SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 
> 'Email address is not found'; 
> 
> --check if password not exists 
> 
> Elseif (checkpasswordcount!=1) then SIGNAL SQLSTATE '45000' SET 
> MESSAGE_TEXT = 'Invalid Password'; else 
> 
> select emailaddress,password,salt,UserID from users where 
> emailaddress=iEmailaddress and password = iPassword; 
> 
> 
> End if; End go DELIMITER ; 
Verwandte Themen