Oracle - Ayuda con una Función (Return Table)

 
Vista:

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.

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 499
Oro
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

Ayuda con una Función (Return Table)

Publicado por Rafael (328 intervenciones) el 29/05/2017 14:07:33
Tu problema empieza con que TU variable se llama como un campo...

Hs probado cambiar el nombre???
Digamos pEliminado??? o cualquier otro que no sea el nombre de un campo ...

Vaya por lo general deberias de usar una notacion que te diferencie las cosas por decir algo:
parametros de entrada pi_<nombre>
parametros de salida po_<nombre>

etc
vaya ... prueba y nos cuentas...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con una Función (Return Table)

Publicado por Snooze2k7 (2 intervenciones) el 30/05/2017 07:52:25
Dios, en algun momento lo pense, pero no crei que fuera simplemente esa tontera.

Agradezo tu respuesta Rafael, funciono de maravilla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar