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

Problema con cursores

Estas en el tema de Problema con cursores en el foro de Oracle en Foros del Web. Buenas tardes, Hace años que no toco nada de cursores ni plsql y estoy muy pegado en esto. Me gustaría que me echarais una mano ...
  #1 (permalink)  
Antiguo 10/02/2018, 09:07
 
Fecha de Ingreso: junio-2011
Mensajes: 68
Antigüedad: 12 años, 9 meses
Puntos: 4
Problema con cursores

Buenas tardes,

Hace años que no toco nada de cursores ni plsql y estoy muy pegado en esto.
Me gustaría que me echarais una mano ya que no tengo cojones de solucionarlo.

Tengo el siguiente código y al ejecutarlo me muestra como error "la recuperacion exacta devuelve un numero mayor de filas que el solicitado)

Añadir un nuevo campo a la tabla "Jobs" llamado "salario_medio" de tipo number (6,0). Crear un procedimiento llamado "ejer2" que se encargue de rellenar toda la columna nueva, estableciendo el valor adecuado para cada Job, dicho valor será la media de los salarios de todos los empleados que tenga cada Job. (Obligatorio usar cursores)*/
Código SQL:
Ver original
  1. CREATE OR REPLACE PROCEDURE "EJER2"
  2. IS
  3. /*param_idjob employees.job_id%TYPE;*/
  4. v_media NUMBER;
  5. v_job VARCHAR(20);
  6. v_salario NUMBER;
  7.  
  8. CURSOR EMP_CURSOR IS SELECT job_id, AVG(salary) FROM EMPLOYEES GROUP BY job_id;
  9. BEGIN
  10. OPEN EMP_CURSOR;
  11. FETCH EMP_CURSOR INTO v_job, v_media;
  12. WHILE EMP_CURSOR%FOUND LOOP
  13. IF v_media IS NOT NULL THEN
  14.  
  15. SELECT AVG (salary) INTO v_salario FROM employees GROUP BY Job_id;
  16.  
  17. UPDATE jobs SET salario_medio = v_salario WHERE job_id = v_job;
  18. END IF;
  19. FETCH EMP_CURSOR INTO v_job, v_media;
  20. END LOOP;
  21. CLOSE EMP_CURSOR;
  22. END;
  23. /
  24. DECLARE
  25.  
  26. BEGIN
  27. /*param_idjob:= 'SA_MAN';*/
  28. EJER2;
  29. END;
  30. /

Gracias por la ayuda.

Última edición por gnzsoloyo; 11/02/2018 a las 14:48
  #2 (permalink)  
Antiguo 12/02/2018, 08:23
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: Problema con cursores

TheCastor

Cuando haces esta operación:
SELECT AVG (salary) INTO v_salario FROM employees GROUP BY Job_id;

El resultado devuelve mas de una fila. Por lo tanto, la asignación con INTO no es posible realizarla.

Sería modificar la consulta para que siempre se de un solo registro y puedas usar el INTO, o bien, recorrer con otro cursor cada uno de los valores retornados por la consulta.

Saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: cursor, cursores, fetch, plsql
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 14:43.