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
Post a Comment