Ayuda con una Función (Return Table)
Publicado por Snooze2k7 (2 intervenciones) el 29/05/2017 09:30:02
Buenas noches, desde ya agradezco cualquier ayuda.
Tengo un problema con este funcion, basicamente es con la restricción en negrita detallada en el codigo, ya que simplemente no funciona, con el resto no tengo problemas, es solo con eso, ya que al remplazar la variable de entrada ELIMINADO por 'Y' o 'N' funciona de maravilla.
EL campo DETALLE.ELIMINADO contiene valores 'Y' y 'N' solamente, pero al realizar la siguiente consulta muestra todo sin filtrar por esa restricción.
Respecto a las fechas y el valor BUSCAR no tengo problemas, puedo filtrar bien sin problemas, es solo con esta restricción.
GRACIAS!!!
Tengo un problema con este funcion, basicamente es con la restricción en negrita detallada en el codigo, ya que simplemente no funciona, con el resto no tengo problemas, es solo con eso, ya que al remplazar la variable de entrada ELIMINADO por 'Y' o 'N' funciona de maravilla.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
create or replace TYPE TABLASALIDA IS OBJECT
(ID_MERMA NUMBER, ID_MEDICAMENTO NUMBER, NOMBRE VARCHAR2(50), COMPONENTE varchar2(50), CANTIDAD number,
FECHA Date, FUNCIONARIO varchar2(9), VENCIDO char(1), ENVASE_ROTO char(1), MAL_ESTADO char(1), ELIMINADO varchar2(1));
create or replace TYPE OUTPUT_TABLE AS TABLE OF TABLASALIDA
create or replace FUNCTION FUC_LISTAR_MERMAS
(
BUSCAR IN VARCHAR2
, ELIMINADO IN VARCHAR2
, DESDE IN VARCHAR2
, HASTA IN VARCHAR2
)
RETURN OUTPUT_TABLE PIPELINED
IS
BEGIN
for RECORD_OUTPUT IN(
SELECT MERMA.ID_MERMA as idmerma, MEDICAMENTO.ID_MEDICAMENTO as idmed, MEDICAMENTO.NOMBRE_MED as nommed, MEDICAMENTO.COMPONENTE as medcomp,
MERMA.CANTIDAD as mercant, MERMA.FECHA_MERMA as merfecha, MERMA.FUNCIONARIO_RUT as funcrut, MERMA.VENCIMIENTO as merven, MERMA.ENVASEROTO as merenvrto,
MERMA.MALESTADO as mermalstdo, DETALLE.ELIMINADO as eliminado
from DETALLE
INNER JOIN MEDICAMENTO ON (MEDICAMENTO.ID_MEDICAMENTO = DETALLE.MEDICAMENTO_ID_MEDICAMENTO)
INNER JOIN MERMA ON (MERMA.ID_MERMA = DETALLE.MERMA_ID_MERMA)
WHERE MERMA.FECHA_MERMA between DESDE and HASTA
and DETALLE.ELIMINADO = ELIMINADO
and (
MEDICAMENTO.NOMBRE_MED like '%'||BUSCAR||'%'
or MEDICAMENTO.COMPONENTE like '%'||BUSCAR||'%'
or MEDICAMENTO.ID_MEDICAMENTO like '%'||BUSCAR||'%'
or MERMA.FUNCIONARIO_RUT like '%'||BUSCAR||'%')
) loop
PIPE ROW(TABLASALIDA(RECORD_OUTPUT.idmerma,
RECORD_OUTPUT.idmed,
RECORD_OUTPUT.nommed,
RECORD_OUTPUT.medcomp,
RECORD_OUTPUT.mercant,
RECORD_OUTPUT.merfecha,
RECORD_OUTPUT.funcrut,
RECORD_OUTPUT.merven,
RECORD_OUTPUT.merenvrto,
RECORD_OUTPUT.mermalstdo,
RECORD_OUTPUT.eliminado));
END LOOP;
END;;
EL campo DETALLE.ELIMINADO contiene valores 'Y' y 'N' solamente, pero al realizar la siguiente consulta muestra todo sin filtrar por esa restricción.
1
SELECT * FROM TABLE(FUC_LISTAR_MERMAS('', 'Y' , TO_DATE('01-01-1999 0:00:00', 'DD/MM/YYYY HH24:MI:SS'),TO_DATE('29-05-2017 2:26:15', 'DD/MM/YYYY HH24:MI:SS')))
Respecto a las fechas y el valor BUSCAR no tengo problemas, puedo filtrar bien sin problemas, es solo con esta restricción.
GRACIAS!!!
Valora esta pregunta


0