[ cesare @ 06.04.2012. 20:07 ] @
Pozdrav svima !!!

Nisam puno vičan u korišćenju SQL jezika. Zato sam uz pomoć Googlanja došao do sledeće procedure.

Code:

BEGIN
  DECLARE BrojKorisnika INT DEFAULT 0;
  DECLARE IdPrijavljenogKorisnika CHAR(40) DEFAULT '';

  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET IdPrijavljenogKorisnika='SQLEXCEPTION';
  DECLARE CONTINUE HANDLER FOR SQLWARNING SET IdPrijavljenogKorisnika='SQLWARNING';

  SELECT COUNT(IdBroj) FROM tblkorisnici WHERE BINARY KIme=PKIme AND BINARY KSifra=PKSifra INTO BrojKorisnika;
    IF BrojKorisnika=1 THEN
     SET AUTOCOMMIT=0;
     START TRANSACTION;
     UPDATE tblkorisnici SET Akcija1='b' WHERE BINARY KIme=PKIme AND BINARY KSifra=PKSifra;
     IF IdPrijavljenogKorisnika='' THEN
        COMMIT; 
        SELECT IdBroj FROM tblkorisnici WHERE BINARY KIme=PKIme AND BINARY KSifra=PKSifra INTO IdPrijavljenogKorisnika;
         ELSE
        ROLLBACK;
     END IF;     
  END IF;
  SELECT IdPrijavljenogKorisnika;
END


Napravio sam tabelu tblkorisnici koja ima polja IdBroj,KIme,KSifra i Akcija, probe radi. Gornja procedura treba da izmeni polje Akcija ako je zadovoljen uslov i vrati IdBroj izmenjenog korisnika. Ako se desi neka greška (što sam namerno prouzrokovao sa Akcija1 umesto Akcija u UPDATE redu, vraća se vrednost 'SQLEXCEPTION'. To je i moje pitanje. Kako da umesto ovoga procedura u slučaju greške vrati kod i tekst nastale greške ?

Unapred hvala ...
[ bogdan.kecman @ 09.04.2012. 03:05 ] @
samo u 5.5 i kasnije

http://dev.mysql.com/doc/refman/5.5/en/resignal.html

Code:

BEGIN
  DECLARE BrojKorisnika INT DEFAULT 0;
  DECLARE IdPrijavljenogKorisnika CHAR(40) DEFAULT '';

  DECLARE EXIT HANDLER FOR SQLEXCEPTION
  BEGIN
    SET @error_count = @error_count + 1;
    RESIGNAL; 
  END;

  SELECT COUNT(IdBroj) FROM tblkorisnici WHERE BINARY KIme=PKIme AND BINARY KSifra=PKSifra INTO BrojKorisnika;
IF BrojKorisnika=1 THEN
...