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

Модераторы: kdv, CyberMax

Ответить
ERrorMAKros
Сообщения: 37
Зарегистрирован: 18 янв 2007, 01:05

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

Сообщение ERrorMAKros » 29 июн 2010, 16:50

Добрый день,
есть вот такая вот процедура:

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

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)?
Если все же не возможно, буду благодарен за быстродействующий аналог этой задачи.

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

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

Сообщение kdv » 29 июн 2010, 20:47

Подскажите - почему не работает 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 и правильным условием и есть быстродействующее решение. А не перекапывание тонн данных в Вашем примере.

ERrorMAKros
Сообщения: 37
Зарегистрирован: 18 янв 2007, 01:05

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

Сообщение ERrorMAKros » 29 июн 2010, 23:37

Понятно! Большое спасибо!

Ответить