Search Postgresql Archives

Re: Question about functions that return a set of records

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Mike Christensen wrote:
> I have the following function:
> 
> CREATE FUNCTION foo(_userid uuid)
>   RETURNS SETOF record AS
> $BODY$
> BEGIN
>   RETURN QUERY
>     select n.UserId, u.Alias, n.Date, n.Data
>     --Bunch of joins, etc
> 
> If I understand correctly, I have to return "SETOF record" since my 
> result set doesn't match a table and isn't a single value.  However, 
> this means when I want to call it I have to provide a column definition 
> list, such as:
> 
> select * from foo as (...);
> 
> Is there any way to specify this column list within the function 
> itself?  The problem I'm running into is I want to call this function 
> using Npgsql which doesn't appear to support passing in a column 
> definition list.

You can avoid that problem if you specify the return type in the function definition.

There are two possibilities:

The "classical" way is to define a TYPE similar to this:

CREATE TYPE foo_type AS (
   _userid uuid,
   _alias text,
   _date date,
   _data text
);

or similar, depending on your select list and data types.
Then you can define the function as:

CREATE FUNCTION foo(_userid uuid) RETURNS SETOF foo_type ...

The "new" way is to use output parameters. This is a little harder
to understand, but you need not define a foo_type:

CREATE FUNCTION foo(INOUT _userid uuid, OUT _alias text, OUT _date date, OUT _data text)
   RETURNS SETOF RECORD ...

In both cases you can call the function like this:

SELECT * FROM foo('A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');

The OUT parameters are just a different way of specifying the output type.

Yours,
Laurenz Albe

-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux