postgresql - Postgres cursor -


i created composite type

create type testdetailreporttype1 ( sname text, cdetailstimestamp  timestamp, number text, dropdi text, queue text, agent text, status int, reference int ) 

i created cursor expect return list of composite type ...but no records returned when execute select * testdetailscursortest11("abc") query written within function when executed directly returns 31 row...i new postgress fail understand place going wrong while making function ,really appreciate guidance @ front.

note->i want write cursor in scenario...i able result when function returning table.

create or replace function public.testdetailscursortest11(     hgname text)     returns setof testdetailreporttype1     language 'plpgsql' $testdetailscursortest11$  declare    cdetailcursor refcursor;    cdetailtevent  record;     -- variable store agent event.    cdetail calldetailreporttype1; begin     open cdetailcursor     select tblusers.username,tblcallevent.statecreatedate,tblcallregister.cli,tblcallregister.ddi,tblhuntgroup.name,     tblusers.extension,     tblcallevent.stateid,     tblcallregister.callid   tblcallregister     inner join tblcallevent on tblcallregister.callregisterid= tblcallevent.callregisterid      inner join tblusers on tblusers.userid=tblcallevent.agentid      inner join tblhuntgroup on tblhuntgroup.hgid=tblcallevent.hgid    name=hgname; fetch next calldetailcursor calldetailtevent;   calldetail.sname=calldetailtevent.username;   calldetail.cdetailstimestamp=calldetailtevent.statecreatedate;   calldetail.number =calldetailtevent.cli; if calldetailtevent.stateid = 19   calldetail.dropdi=calldetailtevent.ddi; else   calldetail.dropdi=calldetailtevent.ddi+1; end if;   calldetail.queue=calldetailtevent.name;   calldetail.agent=calldetailtevent.extension;   calldetail.status =calldetailtevent.stateid;   calldetail.reference=calldetailtevent.callid; return; close calldetailcursor;  end; $testdetailscursortest11$; 

in set returning function (a.k.a. table function) use return not return result, exit function.

you use return next <value>; return result row. function should similar this:

declare    cdetail calldetailreporttype1;    cdetailtevent record; begin    cdetailtevent in       select ...    loop       cdetail.field1 := ...;       cdetail.field2 := ...;        /* return next result row */       return next cdetail;    end loop;     /*     * optional; dropping out end     * of function implicit return     */    return; end; 

the way function written alwazs return empty result because there no return next <value>;.


Comments

Popular posts from this blog

php - How to display all orders for a single product showing the most recent first? Woocommerce -

asp.net - How to correctly use QUERY_STRING in ISAPI rewrite? -

angularjs - How restrict admin panel using in backend laravel and admin panel on angular? -