Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/02/2018, 09:07
TheCastor
 
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