pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Joe Conway <mail@joeconway.com>
To: jbduffy@ntlworld.com
Cc: pgsql-sql@postgresql.org
Subject: Re: plpgsql function returning SETOF RECORD Question
Date: Sun, 29 Feb 2004 15:32:40 -0800
Message-ID: <40427698.2010402@joeconway.com> (raw)
In-Reply-To: <20040223132208.MQDR10961.mta07-svc.ntlworld.com@mta7-svc>
References: <20040223132208.MQDR10961.mta07-svc.ntlworld.com@mta7-svc>

jbduffy@ntlworld.com wrote:
> When I run the function below I recieve an error message saying that
> column definitions need to be specified for a function returing a
> type RECORD.
> 
> I was under the impression that the FOR row IN SELECT... loop would
> assign a column structure to the RECORD type. Am I wrong about this?
> 
> CREATE FUNCTION test() RETURNS SETOF RECORD AS ' DECLARE row  RECORD;
>  BEGIN FOR row IN SELECT * FROM dates LOOP RETURN NEXT row; END LOOP;
> RETURN; END; ' LANGUAGE 'plpgsql';

Please look at the docs:
   http://www.postgresql.org/docs/current/static/sql-select.html

Specifically, the latter half of this paragraph:
   "Function calls can appear in the FROM clause. (This is especially
   useful for functions that return result sets, but any function can be
   used.) This acts as though its output were created as a temporary
   table for the duration of this single SELECT command. An alias may
   also be used. If an alias is written, a column alias list can also be
   written to provide substitute names for one or more attributes of the
   function's composite return type. If the function has been defined as
   returning the record data type, then an alias or the key word AS must
   be present, followed by a column definition list in the form
   ( column_name data_type [, ... ] ). The column definition list must
   match the actual number and types of columns returned by the
   function."

and the example further down the page:
   CREATE FUNCTION distributors_2(int) RETURNS SETOF record AS '
        SELECT * FROM distributors WHERE did = $1;
   ' LANGUAGE SQL;

   SELECT * FROM distributors_2(111) AS (f1 int, f2 text);
    f1  |     f2
   -----+-------------
    111 | Walt Disney

HTH,

Joe




view thread (2+ messages)

Message-ID: <40427698.2010402@joeconway.com>
Permalink:  ../40427698.2010402@joeconway.com/
Also on:    postgresql.org/message-id/40427698.2010402@joeconway.com

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: mail@joeconway.com, jbduffy@ntlworld.com
  Subject: Re: plpgsql function returning SETOF RECORD Question
  In-Reply-To: <40427698.2010402@joeconway.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox