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

[SOLUCIONADO] Procedimiento con cursor pl/ sql

Estas en el tema de Procedimiento con cursor pl/ sql en el foro de Oracle en Foros del Web. Hola a todos tengo un problema con este procedimiento, @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original CREATE OR REPLACE PROCEDURE consultar_asistentes ( tema1 VARCHAR2 ) AS ...
  #1 (permalink)  
Antiguo 15/05/2014, 21:57
 
Fecha de Ingreso: mayo-2014
Mensajes: 12
Antigüedad: 10 años, 6 meses
Puntos: 0
Procedimiento con cursor pl/ sql

Hola a todos tengo un problema con este procedimiento,
Código SQL:
Ver original
  1. CREATE OR REPLACE PROCEDURE consultar_asistentes(tema1 VARCHAR2)
  2. AS CURSOR consulta IS SELECT Asistente.nombre FROM Asistente,Asistir,Conferencia WHERE Asistente.codigo=Asistir.codAsistente AND Conferencia.referencia=Asistir.refConferencia AND Conferencia.tema=tema1;
  3. asistentes_nombres VARCHAR2(20);
  4. BEGIN
  5. OPEN consulta;
  6. while consulta%found loop
  7. FETCH consulta INTO asistentes_nombres;
  8. CLOSE consulta;
  9. DBMS_OUTPUT.PUT_LINE(Asistentes_nombres);
  10. END LOOP;
  11. END;

Me tira error cursor inválido, pero si le quito while ....loop me da el primer nombre de los asistentes qué estoy haciendo mal?

Última edición por gnzsoloyo; 16/05/2014 a las 03:36
  #2 (permalink)  
Antiguo 16/05/2014, 00:55
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 17 años, 5 meses
Puntos: 43
Respuesta: Procedimiento con cursor pl/ sql

pon el CLOSE CONSULTA depsues del END LOOP
  #3 (permalink)  
Antiguo 16/05/2014, 09:33
 
Fecha de Ingreso: mayo-2014
Mensajes: 12
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Procedimiento con cursor pl/ sql

No funciona, me sigue diciendo cursor inválido
  #4 (permalink)  
Antiguo 16/05/2014, 09:53
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimiento con cursor pl/ sql

Código SQL:
Ver original
  1. CREATE OR REPLACE PROCEDURE consultar_asistentes (tema1 VARCHAR2)
  2. AS
  3.     CURSOR consulta
  4.     IS
  5.         SELECT Asistente.nombre
  6.           FROM Asistente, Asistir, Conferencia
  7.          WHERE Asistente.codigo = Asistir.codAsistente
  8.            AND Conferencia.referencia = Asistir.refConferencia
  9.            AND Conferencia.tema = tema1;
  10.  
  11.     asistentes_nombres   VARCHAR2 (20);
  12.     encontrado           NUMBER;
  13. BEGIN
  14.     OPEN consulta;
  15.  
  16.     encontrado    := 0;
  17.  
  18.     LOOP
  19.         EXIT WHEN consulta%NOTFOUND;
  20.  
  21.         FETCH consulta
  22.          INTO asistentes_nombres;
  23.  
  24.         encontrado    := 1;
  25.     END LOOP;
  26.  
  27.     CLOSE consulta;
  28.  
  29.     IF encontrado <> 0
  30.     THEN
  31.         DBMS_OUTPUT.PUT_LINE (Asistentes_nombres);
  32.     END IF;
  33. EXCEPTION
  34.     WHEN OTHERS
  35.     THEN
  36.         DBMS_OUTPUT.put_line (SUBSTR ('Error ' || TO_CHAR (SQLCODE) || ': ' || SQLERRM,
  37.                                       1,
  38.                                       255
  39.                                      ));
  40. END;
__________________
¿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 16/05/2014, 10:08
 
Fecha de Ingreso: mayo-2014
Mensajes: 12
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Procedimiento con cursor pl/ sql

sigue sin funcionar solo me da una fila y deberían de salir 13 nombres, cómo puede ser tan difícil?
  #6 (permalink)  
Antiguo 16/05/2014, 12:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimiento con cursor pl/ sql

TE devuelve un solo registro, porque eso es lo que planteaste en la lógica de tu codigo, y por tanto es lo que hicimos.
Si quiweres algo diferente, eso es lo que tienes que hacer.
Lo que te di debería alcanzar para que sepas lo que tienes que escribir en ese código. Trata de razonarlo y hazlo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 16/05/2014, 12:14
 
Fecha de Ingreso: mayo-2014
Mensajes: 12
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Procedimiento con cursor pl/ sql

gracias lo intentaré, voy con ello, al ver el tuyo me has dado una idea, voy a ponerla en práctica y te comento, gracias de nuevo
  #8 (permalink)  
Antiguo 16/05/2014, 12:17
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimiento con cursor pl/ sql



__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 16/05/2014, 12:26
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Procedimiento con cursor pl/ sql

Cocode... para aclarar un poco.. el hecho que el codigo que te brinda gnzsoloyo solo imprima un solo nombre, no precisamente indica que no los esté recorriendo todos.

La pregunta es: Que quieres hacer con los 13 nombres?
Si solo los quieres visualizar, unicamente tendrías que pasar el DBMS_OUTPUT.PUT_LINE dentro del LOOP para que veas como se imprimen los 13 nombres que esperas.

Saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #10 (permalink)  
Antiguo 16/05/2014, 13:07
 
Fecha de Ingreso: mayo-2014
Mensajes: 12
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Procedimiento con cursor pl/ sql

Nada que no me sale, he intentado hacer un if con distinto de cero pero se queda infinitamente procesando y no muestra nada en pantalla, y lo me meter DBMS_OUTPUT.PUT_LINE dentro del LOOP, lo meto pero se me invalida el cursor.
  #11 (permalink)  
Antiguo 16/05/2014, 13:29
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimiento con cursor pl/ sql

Vamos a volver a probar:
Código SQL:
Ver original
  1. CREATE OR REPLACE PROCEDURE consultar_asistentes (tema1 VARCHAR2)
  2. AS
  3.     CURSOR consulta
  4.     IS
  5.         SELECT Asistente.nombre
  6.           FROM Asistente, Asistir, Conferencia
  7.          WHERE Asistente.codigo = Asistir.codAsistente
  8.            AND Conferencia.referencia = Asistir.refConferencia
  9.            AND Conferencia.tema = tema1;
  10.  
  11.     asistentes_nombres   VARCHAR2 (20);
  12.     encontrado           NUMBER;
  13. BEGIN
  14.     OPEN consulta;
  15.     encontrado    := 0;
  16.     LOOP
  17.         EXIT WHEN consulta%NOTFOUND;
  18.         FETCH consulta INTO asistentes_nombres;
  19.         DBMS_OUTPUT.PUT_LINE (Asistentes_nombres);
  20.         encontrado    := encontrado + 1;
  21.     END LOOP;
  22.     CLOSE consulta;
  23.     IF encontrado <> 0 THEN
  24.         DBMS_OUTPUT.PUT_LINE ('Ttoal de assitentes: '||TO_CHAR(encontrado));
  25.     END IF;
  26. EXCEPTION
  27.     WHEN OTHERS THEN
  28.         DBMS_OUTPUT.put_line (SUBSTR ('Error ' || TO_CHAR (SQLCODE) || ': ' || SQLERRM, 1, 255));
  29. END;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 16/05/2014, 22:09
 
Fecha de Ingreso: mayo-2014
Mensajes: 12
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Procedimiento con cursor pl/ sql

MUchas gracias, solucionado, lo tenía igual que tú pero yo metía el último IF en el LOOP

Etiquetas: cursor, procedimiento, select, sql
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 10:07.