Страница 1 из 1

IN в теле IF условия

Добавлено: 29 июн 2010, 16:50
ERrorMAKros
Добрый день,
есть вот такая вот процедура:

Код: Выделить всё

CREATE PROCEDURE SomeProc(ID INTEGER = NULL)
RETURNS (
    RET INTEGER)
AS
BEGIN
  IF(ID in (SELECT US.ID FROM USERS US WHERE US.ID>1))
     THEN RET=0;
     ELSE RET=1;
END
Подскажите - почему не работает IN в IF? ...или это не возможно (FB2.1)?
Если все же не возможно, буду благодарен за быстродействующий аналог этой задачи.

Предварительное спасибо!

Re: IN в теле IF условия

Добавлено: 29 июн 2010, 20:47
kdv
Подскажите - почему не работает IN в IF? ...или это не возможно (FB2.1)?
так - не должно.
во-первых, вся конструкция вызывает отторжение. В ID может быть только одно значение, поэтому IN не имеет смысла. Зачем заставлять делать сервер тупую работу по выборке ВСЕХ значений US.ID >1, а потом проверять на IN единственному значению? Надо было прямо и писать - where US.ID = :ID.
Во вторых, в PSQL in ... не работает. Надо писать
if (exists(select ... where us.id = ID) then ...

с exists и правильным условием и есть быстродействующее решение. А не перекапывание тонн данных в Вашем примере.

Re: IN в теле IF условия

Добавлено: 29 июн 2010, 23:37
ERrorMAKros
Понятно! Большое спасибо!