Использование CASE в хранимой процедуре.

Запросы, планы, оптимизация запросов, ...

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

Ответить
Akella
Сообщения: 95
Зарегистрирован: 13 дек 2005, 12:07

Использование CASE в хранимой процедуре.

Сообщение Akella » 21 ноя 2007, 16:48

Приветствую всех!
в хранимой процедуре хочу использовать CASE
но IBExpert ругается на begin

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

  select case (CURRENT_WEEK_DAY)
  when 2 then begin --вот здесь ошибка
                if (v_pn = 1) then result = 1
              end
  when 3 then begin
                if (v_vt = 1) then result = 1
              end 
  when 4 then begin
                if (v_sr = 1) then result = 1
              end 
можно ли использовать такую конструкцию или нет?
имею ввиду

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

  when .... then begin
                        какой-то код
                      end
ошибка вот такая:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 23, column 15.
begin.
Последний раз редактировалось Akella 22 ноя 2007, 11:59, всего редактировалось 1 раз.

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

Сообщение kdv » 21 ноя 2007, 18:11

а ты сам такой запрос пробовал отдельно выполнить? case описан в release notes, и он может применяться только в запросах, с соответствующими правилами. В процедуре он используется идентично, ни шире, ни уже.

postman
Сообщения: 14
Зарегистрирован: 08 авг 2005, 09:44

про case

Сообщение postman » 23 ноя 2007, 10:47

без разницы в процедуре или нет. надо написать что-нить типа такого

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

 select case
  when :CURRENT_WEEK_DAY = 2 and :v_pn = 1 then 1
  when :CURRENT_WEEK_DAY = 3 and :v_pn = 1 then 1
  when :CURRENT_WEEK_DAY = 4 and :v_pn = 1 then 1 
 end
 from rdb$database
ну или

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

 select case
  when :CURRENT_WEEK_DAY in(2,3,4) and :v_pn = 1 then 1 end
from rdb$database
case тут играет роль

я так понимаю CURRENT_WEEK_DAY - это переменная, опредяемая выше в процедуре, isn't it?

Akella
Сообщения: 95
Зарегистрирован: 13 дек 2005, 12:07

Сообщение Akella » 23 ноя 2007, 11:44

Спасибо, большое спасибо!

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: про case

Сообщение Dimitry Sibiryakov » 23 ноя 2007, 13:30

postman писал(а):без разницы в процедуре или нет. надо написать что-нить типа такого
select case
А использовать оператор присваивания запрещает религия? Обязательно через select?..

Akella
Сообщения: 95
Зарегистрирован: 13 дек 2005, 12:07

Сообщение Akella » 23 ноя 2007, 17:25

Не понял :( , Вы о чём?

Об этом?
If CURRENT_WEEK_DAY = 2 then begin

end;
If CURRENT_WEEK_DAY = 3 then begin

end;

Ответить