Обсуждение: SRFs returning records from a view

Поиск
Список
Период
Сортировка

SRFs returning records from a view

От
mark.lubratt@indeq.com
Дата:
Hello!

I have a view that I'm putting into a report in my application.  I'd
like to get several blank lines returned by the view as well as the
legitimate data (to leave room in the report for manual entries).  I
thought I could make a SRF that would return the data from the view and
then spit out a number of blank records.

As a first step in getting my SRF feet wet, I tried:

CREATE OR REPLACE FUNCTION bluecard(int4)
  RETURNS SETOF view_bluecard AS
$BODY$declare
    r    view_bluecard%rowtype;
begin
    for r in select * from view_bluecard where job_id = jn loop
        return next r;
    end loop;
    return;
end;$BODY$
  LANGUAGE 'plpgsql' VOLATILE;

where view_bluecard is the view that is already defined.  When I try

select bluecard(1130);

I get the following error:

ERROR:  set-valued function called in context that cannot accept a set
CONTEXT:  PL/pgSQL function "bluecard" line 5 at return next

I've tried searching the archives with no luck.  I've also been
following the SRF tutorial in the TechDocs section.

Can someone please shed some light on this for me?  My plan is to get
this function going and then expand the SRF by creating some other rows
with the blanks as needed and "return next" those as well.

Thanks!
Mark



Re: SRFs returning records from a view

От
"Joshua D. Drake"
Дата:
mark.lubratt@indeq.com wrote:
> Hello!
>
> I have a view that I'm putting into a report in my application.  I'd
> like to get several blank lines returned by the view as well as the
> legitimate data (to leave room in the report for manual entries).  I
> thought I could make a SRF that would return the data from the view and
> then spit out a number of blank records.
>
> As a first step in getting my SRF feet wet, I tried:
>
> CREATE OR REPLACE FUNCTION bluecard(int4)
>   RETURNS SETOF view_bluecard AS
> $BODY$declare
>     r    view_bluecard%rowtype;
> begin
>     for r in select * from view_bluecard where job_id = jn loop
>         return next r;
>     end loop;
>     return;
> end;$BODY$
>   LANGUAGE 'plpgsql' VOLATILE;
>
> where view_bluecard is the view that is already defined.  When I try
>
> select bluecard(1130);

select * from bluecard(1130)?

Sincerely,

Joshua D. Drake

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


--
Your PostgreSQL solutions company - Command Prompt, Inc. 1.800.492.2240
PostgreSQL Replication, Consulting, Custom Programming, 24x7 support
Managed Services, Shared and Dedicated Hosting
Co-Authors: plPHP, plPerlNG - http://www.commandprompt.com/

Re: SRFs returning records from a view

От
mark.lubratt@indeq.com
Дата:

> -------- Original Message --------
> Subject: Re: [GENERAL] SRFs returning records from a view
> From: "Joshua D. Drake" <jd@commandprompt.com>
> Date: Wed, June 01, 2005 4:39 pm
> To: mark.lubratt@indeq.com
> Cc: pgsql-general@postgresql.org
>
> mark.lubratt@indeq.com wrote:
> > Hello!
> >
> > I have a view that I'm putting into a report in my application.  I'd
> > like to get several blank lines returned by the view as well as the
> > legitimate data (to leave room in the report for manual entries).  I
> > thought I could make a SRF that would return the data from the view and
> > then spit out a number of blank records.
> >
> > As a first step in getting my SRF feet wet, I tried:
> >
> > CREATE OR REPLACE FUNCTION bluecard(int4)
> >   RETURNS SETOF view_bluecard AS
> > $BODY$declare
> >     r    view_bluecard%rowtype;
> > begin
> >     for r in select * from view_bluecard where job_id = jn loop
> >         return next r;
> >     end loop;
> >     return;
> > end;$BODY$
> >   LANGUAGE 'plpgsql' VOLATILE;
> >
> > where view_bluecard is the view that is already defined.  When I try
> >
> > select bluecard(1130);
>
> select * from bluecard(1130)?
>

Sorry, 1130 is the job_id for the select's where clause in the function.
 Does that make sense?

If I execute:

select * from view_bluecard where job_id = 1130;

I get the proper set of records.  But, I want to add to them in the SRF
as I explained above.  Thus, I don't think I can do it with just a view
(even using a union within the view as I don't know how many blanks the
user willl want).

Regards,
Mark



Re: SRFs returning records from a view

От
Mark Lubratt
Дата:
AAARRRGGGHHH...  Now I understand you, Josh.  Sorry.

You are correct.

Thanks!
Mark

On Jun 1, 2005, at 4:39 PM, Joshua D. Drake wrote:

> mark.lubratt@indeq.com wrote:
>> Hello!
>> I have a view that I'm putting into a report in my application.  I'd
>> like to get several blank lines returned by the view as well as the
>> legitimate data (to leave room in the report for manual entries).  I
>> thought I could make a SRF that would return the data from the view
>> and
>> then spit out a number of blank records.
>> As a first step in getting my SRF feet wet, I tried:
>> CREATE OR REPLACE FUNCTION bluecard(int4)
>>   RETURNS SETOF view_bluecard AS
>> $BODY$declare
>>     r    view_bluecard%rowtype;
>> begin
>>     for r in select * from view_bluecard where job_id = jn loop
>>         return next r;
>>     end loop;
>>     return;
>> end;$BODY$
>>   LANGUAGE 'plpgsql' VOLATILE;
>> where view_bluecard is the view that is already defined.  When I try
>> select bluecard(1130);
>
> select * from bluecard(1130)?
>
> Sincerely,
>
> Joshua D. Drake
>
>> ---------------------------(end of
>> broadcast)---------------------------
>> TIP 7: don't forget to increase your free space map settings
>
>
> --
> Your PostgreSQL solutions company - Command Prompt, Inc. 1.800.492.2240
> PostgreSQL Replication, Consulting, Custom Programming, 24x7 support
> Managed Services, Shared and Dedicated Hosting
> Co-Authors: plPHP, plPerlNG - http://www.commandprompt.com/
>