29/05/2008, 14:52
|
| | 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 |