postgresql 7.3 и CASE/WHEN

shur
Дата: 04.07.2003 07:12:34
словил такую проблему:
s=> SELECT case 1 when 1 then 0 else '' end;
ERROR: pg_atoi: zero-length string

проблема в том, что по условию выбирается 0 (т.е. работает then), однако сервер всё равно пытается конвертнуть пустую строку в int.
самое интересное, что на 7.2 я такого не замечал.

Подскажите, пожалуйста, в чем проблема.

PS: сервер redhat 7.3
postgresql 7.3.3 поставлен из rpm с сайта постгреса
конфиг запроса во freeradius'е примерно такой:
UPDATE radacct SET AcctStopTime = '%S', AcctInputOctets = CASE WHEN '%{Acct-Input-Octets}' = '' THEN 0 ELSE '%{Acct-Input-Octets}' END;
т.е. если переменная %{Acct-Input-Octets} пустая, то писать в базовод 0.
поле AcctInputOctets типа numeric.
Sad Spirit
Дата: 04.07.2003 13:41:55
> проблема в том, что по условию выбирается 0 (т.е. работает then), однако сервер всё равно пытается конвертнуть пустую строку в int.

что в принципе правильно: серверу ж надо знать какой выходной тип будет у CASE...

> UPDATE radacct SET AcctStopTime = '%S', AcctInputOctets = CASE WHEN '%{Acct-Input-Octets}' = '' THEN 0 ELSE '%{Acct-Input-Octets}' END;

ну, посылай багрепорт авторам freeradius'а. :D
Vladimir_Pivkin
Дата: 09.07.2003 10:16:25
А так не пробовал?
SELECT case 1 when 1 then '0' else '' end;
shur
Дата: 09.07.2003 10:37:10
спасибо, работает ))
только поле у меня numeric, пришлось сделать

SELECT case 1 when 1 then '3000' else '' end::numeric;