Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Retornar un u otra consulta desde una Funcion o Procedimiento Pl SQl

Estas en el tema de Retornar un u otra consulta desde una Funcion o Procedimiento Pl SQl en el foro de Oracle en Foros del Web. Saludos ... disculpen soy nuevo en Pl SQl.. Tengo la siguiente necesidad: Necesito seleccionar una u otra Consulta dado un parametro sea 1 o 2 ...
  #1 (permalink)  
Antiguo 24/07/2008, 08:34
 
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;
  #2 (permalink)  
Antiguo 24/07/2008, 18:06
 
Fecha de Ingreso: junio-2008
Ubicación: D.F.
Mensajes: 62
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Retornar un u otra consulta desde una Funcion o Procedimiento Pl SQl

QUE TAL,


TU FUNCIÓN ESTA BIEN, ASÍ ES COMO SE ARMAN LOS REF CURSORS EL PROBLEMA ES AL QUERER EJECUTARLA.

LA MANERA PARA QUE PUEDEAS VER EL RESULTADO EN PLUS ES LA SIGUIENTE;

SELECT miFuncion(parametro) FROM DUAL
/

Y PARA MANEJAR LOS REGISTROS QUE ESTE CONTENGA, TIENES QUE HACER ALGO COMO ESTO:

DECLARE
TYPE REFCUR IS REF CURSOR;
vrRefCur REFCUR;
vnParam NUMBER(1) := 1;

BEGIN

vrRefCur := miFuncion(vnParam);

LOOP
FETCH vrRefCur INTO -- tus variables que van a alojar cada una de las columnas del ref cursor
EXIT WHEN vrRefCur%NOTFOUND
--AQUÍ LE DAS EL TRATAMIENTO A ESOS REGISTROS
END LOOP;

END;


ESPERO TE SEA DE UTILIDAD.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:35.