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

Reply via email to