Search Postgresql Archives

PL/pgSQL and SETOF

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

 



Hi,

I am having trouble getting a really simple PL/pgSQL function to work.
I am beginning to wonder if there is not a bug somewhere, or if Postgresql's
type system is not broken.  Anyway, suppose I have the following table and
type defined:

	CREATE TABLE items
		(
		item_id		int,
		item_name	text,
		item_etc	text
		);

	CREATE TYPE simple_item_t AS
		(
		item_id		int,
		item_name	text
		);


It's easy to create a SQL function that returns a set of simple items:

	CREATE FUNCTION get_items ()
	RETURNS SETOF simple_item_t
	LANGUAGE sql STABLE AS
	$$
		SELECT item_id, item_name FROM items;
	$$;


Now, all I want is to create the equivalent PL/pgSQL function.  Nothing
more, nothing less.  This is the simplest version I can come up with:

	CREATE FUNCTION get_items2 ()
	RETURNS SETOF simple_item_t
	LANGUAGE plpgsql STABLE AS
	$$
	DECLARE
		item	simple_item_t%ROWTYPE;
	BEGIN
		FOR item IN SELECT item_id, item_name FROM items
			LOOP
				RETURN NEXT item;
			END LOOP;
		RETURN;
	END
	$$;


Unfortunately it doesn't work!  Postgresql complains that "set-valued
function called in context that cannot accept a set".  Anyway, what am
I doing wrong, and what is the simplest way of translating get_items
in PL/pgSQL?

Thanks in advance!
C.S.



      ____________________________________________________________________________________
Get easy, one-click access to your favorites. 
Make Yahoo! your homepage.
http://www.yahoo.com/r/hs 

---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings

[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