Ver Mensaje Individual
  #8 (permalink)  
Antiguo 29/05/2008, 14:52
Michelc
 
Fecha de Ingreso: enero-2008
Mensajes: 63
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: Funcion que me devuelva el Salario Anual

Espero esto te sirva, pero te recomiendo que para la próxima crees un nuevo tema en el foro.

Saludos.

-----------------------------------------------------------------

CREATE OR REPLACE procedure getempleados(
nempleados number,
c out sys_refcursor)
as
cant_empl number;
begin

-- 1º Caso: n es igual a 0
if nempleados = 0 then
raise_application_error(-20000,'La cantidad que ingreso es igual a 0');
end if;
-- 2º Caso: n es mayor a la cantidad de empleados
begin
select count(*) into cant_empl from empleados;
exception
when no_data_found then
cant_empl := 0;
end;
if nempleados > cant_empl then
raise_application_error(-20000,'La cantidad que ingreso, supera la cantidad de empleados');
end if;

-- Obtenemos los "n" número de empleados con mayor sueldo
execute immediate ('truncate table salario_temp'); -- Depuramos el temporal
for aux in( -- Empieza el bucle
select rownum item,
w.codigo,
w.nombre,
w.salario,
w.comision
from(
select codigo, nombre, salario, comision
from empleados
order by salario desc -- Orderna de mayor sueldo a menor
) w
having rownum <= nempleados
group by rownum, w.codigo, w.nombre, w.salario, w.comision
order by rownum
)
loop
-- grabamos en el temporal
insert into salario_temp(codigo, nombre, salario)
values(aux.codigo, aux.nombre, aux.salario);
end loop;

-- devolvemos los datos obtenidos
open c for
select * from salario_temp order by salario desc;

exception
when no_data_found then
null;
when others then
raise_application_error(sqlcode, sqlerrm, true);
raise;
end getempleados;
/

Última edición por Michelc; 29/05/2008 a las 15:16