Re: Returning recordsets with functions

From: "Joshua D(dot) Drake" <jd(at)commandprompt(dot)com>
To: Robert Fitzpatrick <robert(at)webtent(dot)com>
Cc: Tim Penhey <tim(at)penhey(dot)net>, PostgreSQL <pgsql-general(at)postgresql(dot)org>
Subject: Re: Returning recordsets with functions
Date: 2004-09-24 01:11:31
Message-ID: 41537443.5060400@commandprompt.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hello,

When using setOf functions you first create a type to call from:

|CREATE TYPE desc_results
AS (entry_id INTEGER, headline TEXT, rank REAL);
|

After creating the custom type you create a function that calls that type:

CREATE OR REPLACE FUNCTION dresults(text) RETURNS SETOF desc_results AS '

| SELECT entry_id,headline(description,q), rank(vectors,q)
FROM cmd_contact_task_entries, to_tsquery($1) AS q
WHERE vectors @@ q ORDER BY rank(vectors,q)
DESC;' LANGUAGE 'SQL';

Sincerely,

Joshua D. Drake

|

Robert Fitzpatrick wrote:

>On Thu, 2004-09-23 at 18:28, Tim Penhey wrote:
>
>
>>Robert Fitzpatrick wrote:
>>
>>
>>
>>>Can someone point me to some more information or perhaps show an example
>>>of returning a recordset from a plpgsql function. I'd like to send an
>>>argument or arguments to the function, do some queries to return a set
>>>of records. I've done several functions that return one value of one
>>>type, but nothing that returns a set.
>>>
>>>
>>>
>>>
>>Ah ha. Someone else trying to find out what I had hunted for. I could
>>not find an example on the web, so I started writing one.
>>Not fully complete yet, but here is what is there and I hope it helps.
>>http://www.scorefirst.com/postgresql.html
>>
>>
>
>Thanks to all, that is very helpful. But when I create your function or
>a small test function, I get the following error. I am running
>PostgreSQL 7.4.5, do you know what this means or how I can define the
>list?
>
>ERROR: a column definition list is required for functions returning
>"record"
>
>I have another question. I was getting a syntax error when trying to
>create the function on the page linked above:
>
>ERROR: syntax error at or near "INTEGER" at character 64
>
>I made my own test function with trying to put my own variable names in
>the arguments list and it created without the syntax error, but now back
>to the first problem. Here is what I have so far:
>
>CREATE OR REPLACE FUNCTION "public"."test" (varchar) RETURNS SETOF
>"pg_catalog"."record" AS'
>DECLARE
> row_ RECORD;
> cursor_ CURSOR FOR SELECT * FROM tblhudreports WHERE rems_id=$1;
>BEGIN
> OPEN cursor_;
> LOOP
> FETCH cursor_ INTO row_;
> EXIT WHEN NOT FOUND;
> RETURN NEXT row_;
> END LOOP;
>
> CLOSE cursor_;
> RETURN;
>END;
>'LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
>
>ohc=# select * from test('800000061');
>ERROR: a column definition list is required for functions returning
>"record"
>ohc=#
>
>
>

--
Command Prompt, Inc., home of Mammoth PostgreSQL - S/ODBC and S/JDBC
Postgresql support, programming shared hosting and dedicated hosting.
+1-503-667-4564 - jd(at)commandprompt(dot)com - http://www.commandprompt.com
PostgreSQL Replicator -- production quality replication for PostgreSQL

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Matthew Hixson 2004-09-24 01:19:46 self referencing table structure and constraints
Previous Message Robert Fitzpatrick 2004-09-24 00:58:38 Re: Returning recordsets with functions