David Fetter wrote:
> I'd like to take a whack at making set-returning functions returning
> SETOF RECORD a little more fun to use. Let's imagine that we have a
> table foo and a function returning SETOF RECORD that can return foos.
> The call might look something like:
>
> SELECT a, b, c
> FROM f(ROW OF foo)
> WHERE ...;
>
> This would make it much easier and less error-prone to use SETOF
> RECORD.
>
David, it sounds like you really want to declare the return type of the
function? In your above example, you want to say that, in this
particular invocation, function f() returns a SETOF foo's. Is that correct?
If you were to create function that returns a RECORD (not a SETOF
RECORD), you would call it like this:
SELECT * FROM f() AS (column1 type1, column2 type2, column3 type3);
In your case, I think you want to declare the return type using an
explicitly defined composite type (possibly a table row); which would
imply syntax such as:
SELECT * FROM f() AS (foo); or SELECT * FROM f() AS (foo.*);
So, it seems like you want the syntax to look more like:
SELECT a,b,c, FROM f() AS (SETOF foo);
Does that make sense to you? Your original syntax implied that the "ROW
OF foo" was somehow related to the function arguments. -- Korry
--
Korry Douglas <korryd@enterprisedb.com> EnterpriseDB http://www.enterprisedb.com