Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
Akella
- Сообщения: 95
- Зарегистрирован: 13 дек 2005, 12:07
Сообщение
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
можно ли использовать такую конструкцию или нет?
имею ввиду
ошибка вот такая:
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
Сообщение
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
Сообщение
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;