Search Postgresql Archives

Re: how to return parts of records from a function

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

 



A B wrote:
Hello.
I think I need som help on this function I write in plpgsql
I want to return
CREATE OR REPLACE FUNCTION gList(tid_ TIMESTAMP) RETURNS AS $$
DECLARE
	rec RECORD;
BEGIN
	FOR rec IN SELECT DISTINCT custid,action,nr FROM ...
		IF rec.action = ...
		END IF;
		RETURN NEXT  ???????????????
	END LOOP;
	RETURN;
END;
$$ LANGUAGE plpgsql;

I want to replace the ????????? with  something that will contain both
rec.nr  and rec.action. What should that looklike?  rec.nr ,
rec.action  ?

Declare another RECORD for the return value, then assign to its fields with the := operator. If you add the following in your DECLARE block:

	retval RECORD;

then use:

	retval.nr := rec.nr;
	retval.action := rec.action;

you can RETURN NEXT retval.

If you have lots of values to return you can use a row constructor:

	retval := row(rec.nr, rec.action)
	return next retval;

It's also possible to do the same job using a function that has OUT parameters, but the record approach should be fine for you.

And what should I write after RETURNS ....  in the first line? RECORD?

SETOF RECORD

Oh, now that I write this I understand that I could replace the RETURN
NEXT in the loop with a single RETURN QUERY at the end... I don't know
if that will be good, but I still would like to know how to return the
separate fields from the rec  record.

Depending on the contents of your `IF rec.action' you might able to rewrite the whole thing as single SQL statement (using CASE instead of IF) and wrap it up in an SQL stored procedure.

Otherwise RETURN QUERY won't do you much good, because you need to step through the results of the query and do something with them.

--
Craig Ringer


[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