Firebird et des procédures stockées: si il existe d'autre alors

Je suis en train de créer une procédure stockée pour firebird 2.1 (c'est cette version qui est utilisée)
Mais je suis un peu bloqué, de sorte que toute aide est très appréciée.
La version finale devrait comparer les 4 valeurs contre la table, et de récupérer le primaryid si la valeur existe, ou la création de la nouvelle entrée dans la table, et le retour de la nouvelle primaryid.

Mais je suis coincé avec une seule valeur de recherche, et il n'est même pas à l'aide de la variable encore.

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 ; ^

- Je obtenir un Jeton "inconnu" pour la commande Else.

Mise à jour après les réponses:
Maintenant, je veux utiliser les 4 variables et retour le 4 résultats.
Je pense que j'ai besoin d'une boucle for de le faire, mais avec firebird, la fonction signifie quelque chose d'autre.
Donc, ce serait la chose à faire?

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