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

[SOLUCIONADO] llamar un stored dentro de un cursor

Estas en el tema de llamar un stored dentro de un cursor en el foro de Oracle en Foros del Web. un saludo a todos tengo un problemita que no logro resolver y no se si es la manera correcta de hacerlo quiero llamar un stored ...
  #1 (permalink)  
Antiguo 23/02/2013, 12:49
Avatar de emmanuelhxc  
Fecha de Ingreso: octubre-2011
Ubicación: México
Mensajes: 12
Antigüedad: 12 años, 5 meses
Puntos: 0
Pregunta llamar un stored dentro de un cursor

un saludo a todos tengo un problemita que no logro resolver y no se si es la manera correcta de hacerlo quiero llamar un stored stored procedure y asignarlo an cursor de salida ... algo como esto


OPEN p_respuesta FOR

sier.spconsuptimenoparam(p_tipobusqueda=>24,p_fian io=>2012,p_fisemana=>52,p_fistatus=>1,p_respuesta= >:cur);
  #2 (permalink)  
Antiguo 23/02/2013, 18:05
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: llamar un stored dentro de un cursor

Si no me equivoco, para eso el SP tiene que tener al cursor como parámetro de salida...
No lo veo complicado, y he visto muchos casos así en la empresa en que trabajo.
¿Por qué no posteas el código completo de lo que estás haciendo, para ver cómo o haces y donde está el problema?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 25/02/2013, 09:54
Avatar de emmanuelhxc  
Fecha de Ingreso: octubre-2011
Ubicación: México
Mensajes: 12
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: llamar un stored dentro de un cursor

de antemano gracias por tu interés, y si tienes razón yo también creo que no es muy complicado pero no encuentro la forma de hacerlo

aqui esta una parte del stored al que mando a llamar y tambien te pongo el segundo stored con el cual quiero que se llene el cursor

este es el stored que yo ejecuto donde quiero mandar a llamar otros stored

Código SQL:
Ver original
  1. CREATE OR REPLACE PROCEDURE SIER.spconsuptimes (
  2.    p_tipobusqueda    IN       INT DEFAULT 0,
  3.    p_fianio          IN       sier.tauptime.fianio%TYPE DEFAULT 0,
  4.    p_fimes           IN       sier.tauptime.fimes%TYPE DEFAULT 0,
  5.    p_fisemana        IN       sier.tauptime.fisemana%TYPE DEFAULT 0,
  6.    p_fidia           IN       sier.tauptime.fidia%TYPE DEFAULT 0,
  7.    p_fiidsucursal    IN       sier.tauptime.fiidsucursal%TYPE DEFAULT 0,
  8.    p_fiidplaza       IN       sier.cajwdivreg.fiidentificador%TYPE DEFAULT 0,
  9.    p_fiidjefeplaza   IN       sier.cajwdivreg.fiidentificador%TYPE DEFAULT 0,
  10.    p_fcws            IN       sier.tauptime.fcws%TYPE DEFAULT NULL,
  11.    p_fidistrito      IN       sier.tauptime.fiautorizado%TYPE DEFAULT 0,
  12.    p_fipais          IN       sier.cajwsucxregxdiv.fipais%TYPE DEFAULT 0,
  13.    p_fistatus        IN       sier.cajwsucxregxdiv.fistatus%TYPE DEFAULT 0,
  14.    p_finumsemanas    IN       INTEGER DEFAULT 7,
  15.    p_fiantiguedad    IN       INTEGER DEFAULT 26,
  16.    p_respuesta       OUT      TYPES.cursor_type,
  17.    p_cur24           OUT      TYPES.cursor_type
  18. )
  19. AS
  20.    tmp_errorsp      EXCEPTION;
  21.    tmp_errmsg       VARCHAR2 (200);
  22.    tmp_pais         INTEGER;
  23.    tmp_mesanioant   INTEGER;
  24.    tmp_anioantig    INTEGER;
  25.    tmp_mesantig     INTEGER;
  26.    tmp_difnumsem    INTEGER;
  27.    tmp_difantig     INTEGER;
  28. BEGIN
  29.    CASE p_tipobusqueda
  30.      
  31.       WHEN 24
  32.       THEN
  33.          IF p_fianio <> 0 AND p_fisemana <> 0
  34.          THEN
  35.             OPEN p_respuesta FOR
  36.  
  37. sier.spconsuptimenoparam(p_tipobusqueda=>24,p_fianio=>2012,p_fisemana=>52,p_fistatus=>1,p_respuesta=>:cur);
  38.  
  39.          ELSE
  40.             tmp_errmsg :=
  41.                   'ERROR EN sier.spconsuptime, OPCION 2 P_FIANIO = '
  42.                || p_fianio
  43.                || ', P_FIMES '
  44.                || p_fimes
  45.                || ', P_FISEMANA '
  46.                || p_fisemana;
  47.             RAISE tmp_errorsp;
  48.          END IF;
  49.      
  50.       ELSE
  51.          tmp_errmsg := 'OPERACION INVALIDA';
  52.          RAISE tmp_errorsp;
  53.    END CASE;
  54. EXCEPTION
  55.    WHEN tmp_errorsp
  56.    THEN
  57.       raise_application_error (-20102, tmp_errmsg || SQLERRM);
  58.    WHEN OTHERS
  59.    THEN
  60.       raise_application_error (-20102, 'ERROR:' || SQLERRM);
  61. END spconsuptimes;
  62. /
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ este es el stored "secundario"

Código SQL:
Ver original
  1. CREATE OR REPLACE PROCEDURE SIER.spconsuptimenoparam (
  2.    p_tipobusqueda    IN       INT DEFAULT 0,
  3.    p_fianio          IN       sier.tauptime.fianio%TYPE DEFAULT 0,
  4.    p_fimes           IN       sier.tauptime.fimes%TYPE DEFAULT 0,
  5.    p_fisemana        IN       sier.tauptime.fisemana%TYPE DEFAULT 0,
  6.    p_fidia           IN       sier.tauptime.fidia%TYPE DEFAULT 0,  
  7.    p_fcws            IN       sier.tauptime.fcws%TYPE DEFAULT NULL,  
  8.    p_fipais          IN       sier.cajwsucxregxdiv.fipais%TYPE DEFAULT 0,
  9.    p_fistatus        IN       sier.cajwsucxregxdiv.fistatus%TYPE DEFAULT 0,
  10.    p_finumsemanas    IN       INTEGER DEFAULT 7,
  11.    p_fiantiguedad    IN       INTEGER DEFAULT 26,
  12.    p_respuesta       OUT      TYPES.cursor_type
  13. )
  14. AS
  15.    tmp_errorsp      EXCEPTION;
  16.    tmp_errmsg       VARCHAR2 (200);
  17.    tmp_pais         INTEGER;
  18.    tmp_mesanioant   INTEGER;
  19.    tmp_anioantig    INTEGER;
  20.    tmp_mesantig     INTEGER;
  21.    tmp_difnumsem    INTEGER;
  22.    tmp_difantig     INTEGER;
  23. BEGIN
  24.    CASE p_tipobusqueda
  25.       WHEN 24
  26.       THEN
  27.          IF p_fianio <> 0 AND p_fisemana <> 0
  28.          THEN
  29.             OPEN p_respuesta FOR
  30.                SELECT TRUNC ((SUM (fiuptime) / COUNT (fiuptime)),
  31.                              2
  32.                             ) porcentaje
  33.                  FROM sier.tauptime
  34.                 WHERE fianio = p_fianio
  35.                   AND fisemana = p_fisemana
  36.                   AND fiautorizado = p_fistatus;
  37.          ELSE
  38.             tmp_errmsg :=
  39.                   'ERROR EN sier.spconsuptime, OPCION 2 P_FIANIO = '
  40.                || p_fianio
  41.                || ', P_FIMES '
  42.                || p_fimes
  43.                || ', P_FISEMANA '
  44.                || p_fisemana;
  45.             RAISE tmp_errorsp;
  46.          END IF;
  47. ELSE
  48.          tmp_errmsg := 'OPERACION INVALIDA';
  49.          RAISE tmp_errorsp;
  50.    END CASE;
  51. EXCEPTION
  52.    WHEN tmp_errorsp
  53.    THEN
  54.       raise_application_error (-20102, tmp_errmsg || SQLERRM);
  55.    WHEN OTHERS
  56.    THEN
  57.       raise_application_error (-20102, 'ERROR:' || SQLERRM);
  58. END spconsuptimenoparam;

Última edición por emmanuelhxc; 25/02/2013 a las 10:44
  #4 (permalink)  
Antiguo 26/02/2013, 10:35
 
Fecha de Ingreso: febrero-2013
Mensajes: 1
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: llamar un stored dentro de un cursor

Hola:

Tienes este fragmento de codigo en uno de tus procedimientos:
WHEN 2432. THEN33. IF p_fianio <> 0 AND p_fisemana <> 034. THEN35. OPEN p_respuesta FOR
....


ya no es necesario que abras el cursor, solo basta con empezarlo a recorrer , te paso un fragmento de codigo:

-- leyendo el cursor ya que la funcion previa ya lo abrio el cursor
LOOP
FETCH curPolizas INTO vlIdCte
,vlRFC
,vlIdTipoCte
,vlNombreCompleto
,vlCorreo
,vlCalle
,vlNumExt
,vlNumInt
,vlColonia
,vlIDDireccion
,vlIDCodigoSICS
,vlDatosTel
,vlIdEjecutivo
,vlIdTipoDir;

EXIT WHEN curPolizas%NOTFOUND;

-- aqui usas las variable que regresa el cursor curPolizas como se necesite
--- .....


END LOOP;

CLOSE curPolizas;



donde curPolizas es el cursor de salida de otra funcion o procedimiento
  #5 (permalink)  
Antiguo 05/03/2013, 10:13
Avatar de emmanuelhxc  
Fecha de Ingreso: octubre-2011
Ubicación: México
Mensajes: 12
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: llamar un stored dentro de un cursor

gracias de antemano por la respuesta, pero esa no fue la solución, el problema era como estaba asignando mi cursor de salida, yo declaraba una nueva variable, y tenia que asignar el cursor que ya tenia declarado y eso era todo, aunque con tu ejemplo si me sirvió para implementar otras cosas.


si alguien necesita ayuda con la solución no duden en contactarme.

Etiquetas: cursor, procedure, stored
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 23:28.