Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/07/2008, 08:34
Erik Palma
 
Fecha de Ingreso: abril-2006
Mensajes: 21
Antigüedad: 18 años
Puntos: 0
Retornar un u otra consulta desde una Funcion o Procedimiento Pl SQl

Saludos ... disculpen soy nuevo en Pl SQl.. Tengo la siguiente necesidad:
Necesito seleccionar una u otra Consulta dado un parametro sea 1 o 2 para luego presentar en un reporte.
es decir
: parametro --1 o 2

select * from miFuncion(parametro);

pero ni idea como hacer que me funcione hice una funcion que me retorne un cursor y nada que ver:
adjunto mi funcion


PACKAGE BODY TEST_PCKREPORTES
IS
--
-- To modify this template, edit file PKGBODY.TXT in TEMPLATE
-- directory of SQL Navigator
--
-- Purpose: Briefly explain the functionality of the package body
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- --------- ------ ------------------------------------------
-- Enter procedure, function bodies as shown below
function funRptDecosInstalados
( state IN varchar2 ,fechaIni IN date ,fechafin IN date )
RETURN REFCURS as
res REFCURS;
begin
--Dependiendo del estado una u otra query
if(state='A') then

open res for select distinct b.cparty_id,c.account_id cuenta
,xpamutils.fvgetaccountsector(c.account_id) sector
,j.addresscaption,i.name TypoDeco,e.name tipo
,b.fullname,f.name,f.shortname,h.address
,h.addresstype_id,a.activefrom
,d.state,d.contractedfrom,d.contractedto,d.termina tedreason_id
from tamapInstanced a,tamContractingPartyD b,tamcPartyAccountd c,
tamContractedItemD d, tpcaptypes e,tpcproducts f,tamContacts g,
tamapnames h,trepValuelistitems i,tpcaptypenames j
where a.cpartyaccount_id=c.account_id --uno con instancia con cuenta respectiva
and a.cparty_id=b.id --uno con los datos del cliente (pendiente contacots para sector)
and d.apinstance_id= a.apinstance_id --uno las Instancias con los productos del contrato
and d.aptype_id=e.id --uno con el tipo de producto ojo Digital decoder es 16
and d.product_id=f.id -- nombre del producto
and d.state ='A' -- Activos
and d.aptype_id=16 -- solo decos
and d.apaccessmode= 'A' --Solo decos y no eventos
and b.cparty_id=g.cparty_id --une con contacto para ver sector region... formattedContactLine2
and h.cparty_id = b.cparty_id -- une con contrato
and h.cpartyaccount_id=c.account_id -- con cuenta
and i.id=h.addresstype_id -- tipod de decodificador
and h.aptypename_id=j.id -- similar a tipo y typodeco
and d.contractedfrom<=fechafin and d.contractedfrom>=fechaini
-- and d.cparty_id=302
order by sector,b.cparty_id,h.addresstype_id;

else
open res for select b.cparty_id,c.account_id cuenta
--,g.formattedcontactline2 sectorAnt
,xpamutils.fvgetaccountsector(c.account_id) sector
,e.name tipo,b.fullname,f.name
,f.shortname,a.address,a.activefrom
,d.state,d.contractedfrom,d.contractedto,d.termina tedreason_id
from tamapInstanced a,tamContractingPartyD b,tamcPartyAccountd c,
tamContractedItemD d, tpcaptypes e,tpcproducts f,tamContacts g
where a.cpartyaccount_id=c.account_id --uno con instancia con cuenta respectiva
and a.cparty_id=b.id --uno con los datos del cliente (pendiente contacots para sector)
and d.apinstance_id= a.apinstance_id --uno las Instancias con los productos del contrato
and d.aptype_id=e.id --uno con el tipo de producto ojo Digital decoder es 16
and d.product_id=f.id -- nombre del producto
and d.state!='A' and d.state!='S' --No Activos
and d.aptype_id=16 -- solo decos
and d.apaccessmode= 'A' --Solo decos y no eventos
and d.contractedfrom<=fechafin and d.contractedfrom>=fechaini
and b.cparty_id=g.cparty_id --une con contacto para ver sector region... formattedContactLine2
order by sector,b.cparty_id;
end if;
return res;
end;
-- Enter further code below as specified in the Package spec.
function funRptTelefono
( contrato IN number ,cuenta IN number)
RETURN varchar2
is
telf varchar2(35);
begin
select cc.contactfield into telf from tamContactUsage cu,tamcontacts cc
where cu.cparty_id=contrato and cu.cpartyaccount_id=cuenta
and cc.id=cu.contact_id and cc.contacttype_id=2;
return (telf);
EXCEPTION
WHEN NO_DATA_FOUND THEN return '';
end;
END;