Firebird und gespeicherte Prozeduren: wenn es existiert, dann, sonst

Ich versuche zum erstellen einer gespeicherten Prozedur für firebird 2.1 (dies ist die version, die verwendet werden)
Aber bin immer ein wenig stecken, so dass jede Hilfe wird sehr geschätzt.
Die endgültige version sollte vergleichen, 4 Werte gegen den Tisch, und retreive entweder die primaryid, wenn der Wert vorhanden ist, oder erstellen Sie den neuen Eintrag in die Tabelle, und die Rückkehr der neuen primaryid.

Aber ich stecken mit nur einem Wert-lookup, und es auch nicht mithilfe der Variablen noch.

SET TERM ^ ;

CREATE PROCEDURE TESTSP 
 ( A Varchar(64) ) 
RETURNS 
 ( RESULT Integer )
AS 

BEGIN
IF (EXISTS (SELECT PRIMARYID FROM TABLENAME WHERE FIELD = 'Some string')) then
    SELECT PRIMARYID FROM TABLENAME WHERE FIELD = 'Some string' into :primaryid;
    result = PRIMARYID;
ELSE 
    INSERT INTO TABLENAME (FIELD) VALUES ('Some string');
    result = gen_id(GEN_TABLEID, 0);
END^

SET TERM ; ^

Bekomme ich ein "Token unknown" für den Else-Befehl.

Update nach Antworten:
Jetzt will ich mit der 4-Variablen und-Rückgabe der 4 Ergebnisse.
Ich glaube, ich brauche eine for-Schleife zu tun, sondern mit firebird, die für die Funktion bedeutet etwas anderes.
Was wäre also der Weg zu gehen?

SET TERM ^ ;

CREATE PROCEDURE TESTSP 
 ( value1 Varchar(64) ) 
RETURNS 
 ( RESULT1 Integer )
AS 

BEGIN
    IF (EXISTS (SELECT PRIMARYID FROM TABLENAME WHERE FIELD = :value1)) then
        SELECT PRIMARYID FROM TABLENAME WHERE FIELD = value1 into :result1;
    ELSE BEGIN
        result1 = gen_id(GEN_TABLEID, 1);
        INSERT INTO TABLENAME (PRIMARYID, FIELD) VALUES (:result1, :value1);
    END
    suspend;
END^

SET TERM ; ^

InformationsquelleAutor Giancarlo | 2013-12-30

Schreibe einen Kommentar