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

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

Добавлено: 21 ноя 2007, 16:48
Akella
Приветствую всех!
в хранимой процедуре хочу использовать 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.

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

про case

Добавлено: 23 ноя 2007, 10:47
postman
без разницы в процедуре или нет. надо написать что-нить типа такого

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

 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?

Добавлено: 23 ноя 2007, 11:44
Akella
Спасибо, большое спасибо!

Re: про case

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

Добавлено: 23 ноя 2007, 17:25
Akella
Не понял :( , Вы о чём?

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

end;
If CURRENT_WEEK_DAY = 3 then begin

end;