[mySQL] prüfen auf fehler

Pozzle

Grünschnabel
hi,

ich mochte mit einer stored function einen eintrag in eine tabelle mache.
die function soll auch prüfen ob dabei ein fehler entstanden ist und falls ja, soll sie false zurückgeben.
bestimmt gibt es dafür eine mysql systemvariable die man überprüfen kann.
ich habe aber nach längerem suchen nichts gefunden.

hier mal die function ... stelle die überprüft werden soll ist mit kommentar versehen

Code:
DELIMITER |

-- -----------------------------------------------------------------------------

DROP FUNCTION IF EXISTS dominik.sp_AddNewGaestebuch|
CREATE FUNCTION sp_AddNewGaestebuch (VarName VARCHAR(50), VarEintrag TEXT, VarEMail VARCHAR(75), VarHomepage VARCHAR(255), VarICQ INT(10), VarDatum INT(10), VarMSN VARCHAR(75), VarYahoo VARCHAR(50))
  RETURNS BOOL
  BEGIN
      -- Initialisieren
      DECLARE VarCheck BOOL DEFAULT FALSE;

      -- Insert ausführen
      INSERT INTO gaestebuch (name, eintrag, email, homepage, icq, datum, msn, yahoo) VALUES (VarName, VarEintrag, VarEMail, VarHomepage, VarICQ, VarDatum, VarMSN, VarYahoo);

      -- Pruefen ob Abfrage erfolgreich
      IF ........... THEN   -- HIER SOLL ER PRÜFEN OB INSERT OHNE ERROR
          SET VarCheck = TRUE;
      END IF

      -- Rueckgabe
      RETURN VarCheck;
  END|

-- -----------------------------------------------------------------------------

DELIMITER ;

hoffe ihr könnt helfen

gruß
Pozzle

p.s.: noch kurz dazwischen: die initialisierung ist doch richtig (bei mssql muss da glaub noch ein @ davor, damit der weis, dass es eine variable ist)
 
Zuletzt bearbeitet:
Hallo,

meines erachtens sollte die Variable @@Error (integer) eine Fehlernummer enthalten wenn die Anweisung nicht erfolgreich war, ist @@Error leer, ist alles in ordnung.

Es müsste also reichen wenn die Funktion @@Error als Ergebnis zurückliefert, wobei false dann erfolgreich bedeutet.

Gruß

Marcus
 
bist du sicher ?
ich weis nur, dass es diese variable in mssql gibt
in der dokumentation von mysql hab ich nichts dazu gefunden :'(
 
Hi,

entschuldige, ich dachte du wärst in der MSSQL welt, aber für MYSQL habe ich folgendes gefunden, allerdings für procedures, ich denke aber das es in Functions auch geht. Es ist aber bestimmt zumindest ein anhaltspunkt:



DROP FUNCTION IF EXISTS dominik.sp_AddNewGaestebuch|
CREATE FUNCTION sp_AddNewGaestebuch (VarName VARCHAR(50), VarEintrag TEXT, VarEMail VARCHAR(75), VarHomepage VARCHAR(255), VarICQ INT(10), VarDatum INT(10), VarMSN VARCHAR(75), VarYahoo VARCHAR(50))
RETURNS BOOL
BEGIN
-- Initialisieren
DECLARE VarCheck BOOL DEFAULT TRUE;
DECLARE CONTINUE HANDLER FOR SQLWARNING SET @VarCheck = FALSE;

-- Insert ausführen
INSERT INTO gaestebuch (name, eintrag, email, homepage, icq, datum, msn, yahoo) VALUES (VarName, VarEintrag, VarEMail, VarHomepage, VarICQ, VarDatum, VarMSN, VarYahoo);

-- Rueckgabe
RETURN VarCheck;
END|
 
ja, danke habs auch gefunden :D
so :D

Code:
DROP FUNCTION IF EXISTS sp_AddNewGaestebuch|
CREATE FUNCTION sp_AddNewGaestebuch (VarName VARCHAR(50), VarEintrag TEXT, VarEMail VARCHAR(75), VarHomepage VARCHAR(255), VarICQ INT(10), VarDatum INT(10), VarMSN VARCHAR(75), VarYahoo VARCHAR(50))
	RETURNS BOOL
	BEGIN
		-- Initialisieren
		DECLARE VarCheck BOOL DEFAULT TRUE;
    DECLARE CONTINUE HANDLER FOR SQLWARNING, NOT FOUND, SQLEXCEPTION SET VarCheck=FALSE;

		-- Insert ausführen
		INSERT INTO gaestebuch (name, eintrag, email, homepage, icq, datum, msn, yahoo) VALUES (VarName, VarEintrag, VarEMail, VarHomepage, VarICQ, VarDatum, VarMSN, VarYahoo);
		
		-- Rueckgabe
		RETURN VarCheck;
	END|
-- -----------------------------------------------------------------------------
DELIMITER ;
 

Neue Beiträge

Zurück