Опитвам се да създам съхранена процедура за firebird 2.1 (това е версията, която ще се използва), но малко се забивам, така че всяка помощ е благодарна. Окончателната версия трябва да сравни 4 стойности спрямо таблицата и да извлече или основния идентификатор, ако стойността съществува, или да създаде нов запис в таблицата и да върне новия първичен идентификатор.
Но се забивам само с едно търсене на стойност и то дори още не използва променливата.
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 ; ^
Получавам "Token unknown" за командата Else.
Актуализация след отговори: Сега искам да използвам 4-те променливи и да върна 4-те резултата. Мисля, че имам нужда от for цикъл, за да направя това, но с firebird функцията for означава нещо друго. И така, какъв би бил пътят?
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 ; ^