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

Resultado con SP

Estas en el tema de Resultado con SP en el foro de Oracle en Foros del Web. Estimados, tengo la siguiente consulta en ORACLE: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT DISTINCT ir . id_llamada_mac , ei . ID_ORDEN       ...
  #1 (permalink)  
Antiguo 29/07/2014, 08:26
Rev
 
Fecha de Ingreso: enero-2013
Mensajes: 22
Antigüedad: 11 años, 2 meses
Puntos: 0
Pregunta Resultado con SP

Estimados, tengo la siguiente consulta en ORACLE:
Código SQL:
Ver original
  1. SELECT DISTINCT ir.id_llamada_mac ,ei.ID_ORDEN
  2.                 FROM PO_call@dbl_po pc,
  3.                     INSERTA_RECLAMO ir,
  4.                     po_simple_area@dbl_po psa,
  5.                     po_order@dbl_po PO,
  6.                     etr_incidencia ei
  7.                 WHERE ir.ID_LLAMADA = PC.id
  8.                 AND ei.NUMERO_ORDEN = numero_orden
  9.                 AND ir.NUMERO_CONTACTO != '0'
  10.                 AND PO.SIMPLE_AREA_ID = PSA.ID
  11.                 AND PO.incident_id = PC.incident_id
  12.                 AND ei.ID_ORDEN        = PO.ID;
Esta consulta recibe el valor de numero_orden por teclado, el problema es que necesito por requerimiento usar esta consulta en un SP:

Código SQL:
Ver original
  1. DROP PROCEDURE MAC.SPA_OBT_NUM_LLAMADAS;
  2.  
  3. CREATE OR REPLACE PROCEDURE  SPA_OBT_NUM_LLAMADAS
  4. (
  5. numero_orden NUMBER,
  6. p_cursor OUT SYS_REFCURSOR
  7. )
  8. IS
  9. BEGIN
  10.     OPEN p_cursor FOR
  11.        SELECT DISTINCT  ir.id_llamada_mac ,ei.ID_ORDEN
  12.                     FROM PO_call@dbl_po pc,
  13.                         INSERTA_RECLAMO ir,
  14.                         po_simple_area@dbl_po psa,
  15.                         po_order@dbl_po PO,
  16.                         etr_incidencia ei
  17.                     WHERE ir.ID_LLAMADA = PC.id
  18.                     AND ei.NUMERO_ORDEN = numero_orden
  19.                     AND ir.NUMERO_CONTACTO != '0'
  20.                     AND PO.SIMPLE_AREA_ID = PSA.ID
  21.                     AND PO.incident_id = PC.incident_id
  22.                     AND ei.ID_ORDEN        = PO.ID;
  23.         CLOSE p_cursor;
  24. END SPA_OBT_NUM_LLAMADAS;

Pero el resultado no es el mismo, cuando realizo la consulta fuera del sp con numero orden como '1287571-1', me trae 6 datos (que son los que debería traer), pero si lo hago con el sp, me trae todos los datos como, como si no tomara la condición del WHERE.

Por que puede ser? espero que pueda ayudarme...saludos
  #2 (permalink)  
Antiguo 29/07/2014, 09:57
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Resultado con SP

No se si tenga que ver, pero el parametro de entrada es numero_orden es de tipo number.
Cuando le ingresas 1287571-1 el procedimiento hace la operaciòn matematica y creerìa que queda con 1287570.

Verifica este ultimo dato y nos cuentas si corresponde a la salida.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 29/07/2014, 13:07
Rev
 
Fecha de Ingreso: enero-2013
Mensajes: 22
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Resultado con SP

Revise lo que me dijiste, la verdad que ya sea varchar o number, es como si el SP omitiera la condición AND ei.NUMERO_ORDEN = numero_orden.
ademas, como resultado me trae ir.id_llamada_mac donde, 1 numero_orden puede tener muchas ir.id_llamada_mac .
  #4 (permalink)  
Antiguo 29/07/2014, 13:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Resultado con SP

Cita:
Revise lo que me dijiste, la verdad que ya sea varchar o number, es como si el SP omitiera la condición AND ei.NUMERO_ORDEN = numero_orden.
Bueno, por lo pronto, el comportamiento de la query, si es NUMBER o VARCHAR2 no es igual, dependiendo del contenido del parametro al invocarlo...
Empecemos por el principio: ¿Qué tipo de dato es la columna NUMERO_ORDEN de la tabla ETR_INCIDENCIA?

Luego:
¿Qué diferencia tiene cuando corres esta query:
Código SQL:
Ver original
  1. SELECT DISTINCT ir.id_llamada_mac, ei.ID_ORDEN
  2.            FROM PO_call@dbl_po pc,
  3.                 INSERTA_RECLAMO ir,
  4.                 po_simple_area@dbl_po psa,
  5.                 po_order@dbl_po PO,
  6.                 etr_incidencia ei
  7.           WHERE ir.ID_LLAMADA = PC.ID
  8.             AND ei.NUMERO_ORDEN = 1287571-1
  9.             AND ir.NUMERO_CONTACTO != '0'
  10.             AND PO.SIMPLE_AREA_ID = PSA.ID
  11.             AND PO.incident_id = PC.incident_id
  12.             AND ei.ID_ORDEN = PO.ID;
y qué trae esta:

Código SQL:
Ver original
  1. SELECT DISTINCT ir.id_llamada_mac, ei.ID_ORDEN
  2.            FROM PO_call@dbl_po pc,
  3.                 INSERTA_RECLAMO ir,
  4.                 po_simple_area@dbl_po psa,
  5.                 po_order@dbl_po PO,
  6.                 etr_incidencia ei
  7.           WHERE ir.ID_LLAMADA = PC.ID
  8.             AND ei.NUMERO_ORDEN = '1287571-1'
  9.             AND ir.NUMERO_CONTACTO != '0'
  10.             AND PO.SIMPLE_AREA_ID = PSA.ID
  11.             AND PO.incident_id = PC.incident_id
  12.             AND ei.ID_ORDEN = PO.ID;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 29/07/2014, 15:47
Rev
 
Fecha de Ingreso: enero-2013
Mensajes: 22
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Resultado con SP

Estimado,
numero_orden es del tipo varchar, asi que en la primera query me da error ORA-00900: invalid SQL statement.
en la segunda query, me trae los campos id_llamada mac y id_orden,
en los cuales id_llamada_mac son distintos y trae id_orden =1123771 el cual es el mismo en el total de las 6 filas que trae:

id_llamda_mac | id_orden
15294388 | 1123771
15294421 | 1123771
15294378 | 1123771
15294414 | 1123771
15294380 | 1123771
15294387 | 1123771
  #6 (permalink)  
Antiguo 29/07/2014, 15:52
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Resultado con SP

Rev..

Tu primer error es que el parametro de entrada es un number.
CREATE OR REPLACE PROCEDURE SPA_OBT_NUM_LLAMADAS
(
numero_orden NUMBER,
p_cursor OUT SYS_REFCURSOR
)


La verdad, no entiendo cuando dices que el valor de entrada es la cadena '1287571-1' pero los resultados son 1123771. Si es cadena, el signo - siempre debe estar.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 31/07/2014, 06:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Resultado con SP

Por simple curiosidad, porque veo en que query que ese dato preciso no lo estás pidiendo en el SELECT...
¿Podrías pasarnos qué te devuelve si lo pides así:
Código SQL:
Ver original
  1. SELECT DISTINCT ir.id_llamada_mac, ei.ID_ORDEN, ei.NUMERO_ORDEN
  2.            FROM PO_call@dbl_po pc,
  3.                 INSERTA_RECLAMO ir,
  4.                 po_simple_area@dbl_po psa,
  5.                 po_order@dbl_po PO,
  6.                 etr_incidencia ei
  7.           WHERE ir.ID_LLAMADA = PC.ID
  8.             AND ei.NUMERO_ORDEN = '1287571-1'
  9.             AND ir.NUMERO_CONTACTO != '0'
  10.             AND PO.SIMPLE_AREA_ID = PSA.ID
  11.             AND PO.incident_id = PC.incident_id
  12.             AND ei.ID_ORDEN = PO.ID;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: cursor, resultado
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 21:23.