Re: how to return 0 rows in function

Поиск
Список
Период
Сортировка
От Tomas Macek
Тема Re: how to return 0 rows in function
Дата
Msg-id alpine.LFD.0.99.0705181253250.12374@maca.fortech.cz
обсуждение исходный текст
Ответ на Re: how to return 0 rows in function  (Richard Huxton <dev@archonet.com>)
Список pgsql-general

On Fri, 18 May 2007, Richard Huxton wrote:

> Tomas Macek wrote:
>> Hi, I have simplified function like this:
>>
>> ----------------
>> CREATE OR REPLACE FUNCTION f(varchar) RETURNS varchar AS $FUNC$
>> DECLARE
>>     addr ALIAS FOR $1;
>> BEGIN
>>     -- return NULL;
>>     -- return '';
>> END
>> $FUNC$ LANGUAGE 'plpgsql';
>> -----------------
>>
>> This function is returning varchar and it always returns at least one row.
>> How can I make it to return 0 rows? Is it possible or not and how?
>
> It's not returning one row, it's returning a single scalar value (a varchar).
> SELECT f('x') will return one row, because a SELECT statement returns a set
> (well, actually a bag) of results.
>
>> Returning NULL does not help (return NULL string in 1 row). Not to return a
>> value leads to error output.
>
> If you want to return multiple results (in your case zero) you'll need to
> return a set of them:
>
> CREATE FUNCTION f2(varchar) RETURNS SETOF varchar AS $$
> DECLARE
> BEGIN
>     IF $1 = 'a' THEN
>         RETURN NEXT 'hello';
>     END IF;
>     RETURN;
> END
> $$ LANGUAGE plpgsql;
>
> SELECT * FROM f2('b');
> f2
> ----
> (0 rows)
>
> As you can see you need to call the function in set-returning context now.
>
> Does that help?

Thank you very much, that's what I was looking for. I'm newbie in postgres programming. I needed this function for
Postfix,which complains to the maillog when the SQL query returns 1 row with zero-lenght string instead of 0 rows. 

Best regards, Tomas


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

Предыдущее
От: Peter Eisentraut
Дата:
Сообщение: Re: how to return 0 rows in function
Следующее
От: Gerhard Wiesinger
Дата:
Сообщение: Tools for dumping pg_xlog, pg_clog, etc?