Я пытаюсь создать хранимую процедуру для 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 ; ^
Я получаю «Токен неизвестен» для команды 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 ; ^