viernes, 6 de enero de 2012

Clase 6 - Viernes 6 de Enero de 2012

------------------------------------
:::: CREAR UN PROCEDIMIENTO :::
------------------------------------


CREATE OR REPLACE Procedure Bono2012(pNumEmpleado in Empleado.numempleado%type, pBono numeric:= 0.01)
Is
vSalario empleado.salario%Type;
vTotpropiedad numeric;

Begin

SELECT SALARIO into vSalario /* seguarda el salario en una variable */
FROM EMPLEADO
Where numempleado = pNumEmpleado;

/* Obtiene la cantidad de propiedades del empleado */
select count(*) into vTotpropiedad
From PROPIEDAD
Where numempleado = pNumEmpleado;


if vTotpropiedad >= 5 then
update EMPLEADO Set salario = salario * (1 + pBono)
Where numempleado = pNumEmpleado;

dbms_output.put_line('Empleado: ' || pNumEmpleado || ' Bono: ' || pBono || ' Aumento: ' || vSalario * pBono);
else
dbms_output.put_line('Empleado: ' || pNumEmpleado || ' no obtubo bono...');
end if;

End Bono2012;

*****************************************************************************
-> DEFINICIONES:

Parametro real: Es el valor que paso a mi funcion o procedimiento.
Ejemplo --> Bono2012('SL21')

Parametro formal: Es con el que defino la funcion o procedimiento
Ejemplo --> Bono2012(pNumEmpleado in Empleado.numempleado%type, pBono numeric:= 0.01)


*****************************************************************************


-> EJECUTAR PROCEDIMIENTO.
1.-
Begin
Bono2012('SL21'); /* sino se ingresa monto de bono se asume que es 0.01
end;

2.-
Begin
Bono2012('SL21', 006);
end;

3.-
Begin
Bono2012(pNumEmpleado =>'SL21');
end;


-> EJECUTAR PROCEDIMIENTO EN DISTINTOORDEN DE PARAMETROS.

1.-
Begin
Bono2012(pBono => 0.06, pNumEmpleado =>'SL21');
end;

2.-
Begin
Bono2012('SL21',pBono => 0.05);
end;


*****************************************************************************
*****************************************************************************
*****************************************************************************

------------------------------------
:::: CREAR UNA FUNCION :::
------------------------------------


create or replace function contar_propiedades(pNumEmpleado empleado.NumEmpleado%Type)
Return numeric IS

CantProp numeric;

Begin

Select Count(*) into CantProp
From Propiedad
Where NumEmpleado = pNumEmpleado;


Return CantProp;

Exception
When No_Data_Found Then
Return 0;
When others then
Return 0;

End contar_propiedades;


-> EJECUTAR UNA FUNCION:

1.- Select contar_propiedades('SL21') from dual;
2.-
Begin
dbms_output.put_line('la cantidad de propiedades es: ') || contar_propiedades('SL21');
End;


----> Crear function para sumar los digitos de un numero <------

Create or replace function suma_digitos(pnumero in numeric) return numeric is

num_aux numeric;
suma numeric;
Begin
num_aux:= pnumero;
While num_aux > 0 loop
suma:= + mod(num_Aux,10);
num_aux := trunc(num_aux / 10);
end loop;

Return suma;
End;

No hay comentarios:

Publicar un comentario