Re: a function problem...

Поиск
Список
Период
Сортировка
От Mike Mascari
Тема Re: a function problem...
Дата
Msg-id 001501c2d77c$f2da3b20$0102a8c0@mascari.com
обсуждение исходный текст
Ответ на a function problem...  (joye4023@gigigaga.com (joyehsu))
Список pgsql-general
From: "joyehsu" <joye4023@gigigaga.com>


> Hi! I tried to create a pgsql function to get me default
values, but I
> can't get correct results,please help me solve the problem...
>
> create table test (t text);
> CREATE FUNCTION test()
> RETURNS text
> AS 'DECLARE
> prefix text;
> maxint integer;
> ret text;
>
> BEGIN
> prefix := cast(date_part('year', now())::integer - 1911 as
text) ||
> lpad(date_part('month', now()), 2, '0');
> SELECT INTO maxint max(date_part('day', t::date))::integer
from test
> where t like prefix || '%';
> IF FOUND
> THEN
> maxint := maxint + 1;
> ret = prefix || lpad(cast(maxint as text), 2, '0');
> ELSE
> ret = prefix || cast('01' as text);
> END IF;
> RETURN ret;
> END;'
> LANGUAGE 'plpgsql';
>
> The above are my table and fuction...what test() do is to find
out the
> max value 'maxint' in column 'test', and return maxint + 1...

I believe MAX() will return NULL when rows don't match. So
maxint after the select is NULL, and FOUND is true. So I'd write

IF (maxint IS NULL) THEN
...

Yet another reason why NULLs are evil...

Mike Mascari
mascarm@mascari.com



В списке pgsql-general по дате отправления:

Предыдущее
От: "Aurangzeb M. Agha"
Дата:
Сообщение: changing the last_value in a sequence
Следующее
От: Tom Lane
Дата:
Сообщение: Re: nodeRead: did not find '}' at end of plan node