eca : Evento, condicion, Accion
El Evento que dispara la regla especificada, en Oracle puede ser:
Una instrucción INSERT, UPDATE, DELETE
Una instrucción CREATE, ALTER o DROP
Un arranque de la BD o detención de la instancia
Un inicio o fin de sesión por parte del usuario
Un mensaje de Error
Un trigger es un procedimiento. (pero especial)
- a diferencia que no resibe un parametro
- se ejecuta solo
propbando un triger
---primero creamos 2 tablas t4 y t5
CREATE TABLE T4 (a INTEGER, b CHAR(10));
CREATE TABLE T5 (c CHAR(10), d INTEGER);
---Creamos el trigger
CREATE TRIGGER trig1
AFTER INSERT ON T4
REFERENCING NEW AS newRow
FOR EACH ROW
WHEN (newRow.a <= 10)
BEGIN
INSERT INTO T5 VALUES(:newRow.b, :newRow.a);
END trig1;
---luego agregamos valores a la tabla t4
insert into t4 values(7,'asd')
Ahora segun las condiciones del triger revisamos la tabla t5 y revisamos que se agregaron los mismos valores
miércoles, 11 de enero de 2012
viernes, 6 de enero de 2012
clase viernes 06 de enero del 2012
TRABAJAMOS CREANDO PROCEDIMIENTO Y FUNCIONES
para aquellos empleados que tengan mas de 5 propiedades se le agrega un bono segun el parametro.
pare eso creamos lo sig.
-- creamos el procedimiento
create or replace procedure bono2012 (pNumempleado in empleado.NUMEMPLEADO%type, pBono numeric:= 0.01)
is
-- declaramos las variables a ocupar
vSalario empleado.salario%type;
vTotprop numeric;
begin
select salario into vSalario --selecionamos el salario y lo guardamos en vsalrio
from empleado
where numempleado = pNumempleado;
select count(*) into vTotprop -- contamos las propiedades de los empleados y lo guardamos en vTotprop
from propiedad
where numempleado = pNumempleado;
if vTotprop >= 5 then -- vemos si vtotpro es mayor o igual a 5
update empleado
set salario = salario + salario*pBono
where numempleado =pNumempleado; --- aca terminamos de actualizar los valores de los empleados segun el bono
dbms_output.put_line ('empleado'||pnumempleado||'bono'||pBono||'aumento'||vSalario*pBono); -- imprimimos el resultado
else
dbms_output.put_line ('empleado'||pNumempleado||'no aplico bono'); -- imprimimos si no hay resultados
end if;
end bono2012; -- cerramos procedimiento
APLICAMOS BONO A EMPLEADO SL21
begin
bono2012('SL21',pBono => 0.05);
end;
CREAMOS FUNCION CUENTA PROPIEDADES
create or replace function cuentapropiedades (pNumepleado empleado.numempleado%type)
return number
is
vTotprop numeric; -- declaramos variable VTotprop
begin
select count(*) into vTotprop
from propiedad
where numepleado = pNumempleado;
return vTotprop;
exception
when no_data_found then
return 0;
when others then
return 0;
end
LLAMAMOS A LA FUNCION
SELECT cuantapropiedades('SL21') FROM dual
--- CREAMOS FUNCION DONDE AL INGRESAR UN NUMERO ENTREGA LA SUMA DE LOS RESTOS
create or replace function sumadijito(pNumero in number)
return number
is
num_aux number;
suma number;
begin
num_aux :=pNumero;
suma := 0;
while num_aux > 0 loop
suma :=suma + mod(num_aux,10);
num_aux := trunc (num_aux/10);
end loop;
return suma;
end;
LLAMAMOS A LA FUNCION
select sumadijito(125) from dual -- ingresamos el numero 125 entregando como resultado 8
para aquellos empleados que tengan mas de 5 propiedades se le agrega un bono segun el parametro.
pare eso creamos lo sig.
-- creamos el procedimiento
create or replace procedure bono2012 (pNumempleado in empleado.NUMEMPLEADO%type, pBono numeric:= 0.01)
is
-- declaramos las variables a ocupar
vSalario empleado.salario%type;
vTotprop numeric;
begin
select salario into vSalario --selecionamos el salario y lo guardamos en vsalrio
from empleado
where numempleado = pNumempleado;
select count(*) into vTotprop -- contamos las propiedades de los empleados y lo guardamos en vTotprop
from propiedad
where numempleado = pNumempleado;
if vTotprop >= 5 then -- vemos si vtotpro es mayor o igual a 5
update empleado
set salario = salario + salario*pBono
where numempleado =pNumempleado; --- aca terminamos de actualizar los valores de los empleados segun el bono
dbms_output.put_line ('empleado'||pnumempleado||'bono'||pBono||'aumento'||vSalario*pBono); -- imprimimos el resultado
else
dbms_output.put_line ('empleado'||pNumempleado||'no aplico bono'); -- imprimimos si no hay resultados
end if;
end bono2012; -- cerramos procedimiento
APLICAMOS BONO A EMPLEADO SL21
begin
bono2012('SL21',pBono => 0.05);
end;
CREAMOS FUNCION CUENTA PROPIEDADES
create or replace function cuentapropiedades (pNumepleado empleado.numempleado%type)
return number
is
vTotprop numeric; -- declaramos variable VTotprop
begin
select count(*) into vTotprop
from propiedad
where numepleado = pNumempleado;
return vTotprop;
exception
when no_data_found then
return 0;
when others then
return 0;
end
LLAMAMOS A LA FUNCION
SELECT cuantapropiedades('SL21') FROM dual
--- CREAMOS FUNCION DONDE AL INGRESAR UN NUMERO ENTREGA LA SUMA DE LOS RESTOS
create or replace function sumadijito(pNumero in number)
return number
is
num_aux number;
suma number;
begin
num_aux :=pNumero;
suma := 0;
while num_aux > 0 loop
suma :=suma + mod(num_aux,10);
num_aux := trunc (num_aux/10);
end loop;
return suma;
end;
LLAMAMOS A LA FUNCION
select sumadijito(125) from dual -- ingresamos el numero 125 entregando como resultado 8
procedimiento 2 parametros entradas pbono y empleado
create or replace procedure bono2012 (pnumempleado IN empleado.NUMEMPLEADO%type, pbono numeric:= 0.01)
is
vsalario empleado.salario%type;
vtotprop numeric;
begin
select salario into vsalario
from empleado
where numempleado = pnumempleado;
select count (*) into vtotprop
from propiedad
where numempleado = pnumempleado;
if vtotprop >= 5 then
update empleado
set salario = salario + salario * pbono
where numempleado = pnumempleado;
dbms_output.put_line ('empleado '|| pnumempleado || 'bono' || pbono || 'aumento' || vsalario * pbono);
else
dbms_output.put_line ('empleado' || pnumempleado || 'no aplico bono');
end if;
end;
is
vsalario empleado.salario%type;
vtotprop numeric;
begin
select salario into vsalario
from empleado
where numempleado = pnumempleado;
select count (*) into vtotprop
from propiedad
where numempleado = pnumempleado;
if vtotprop >= 5 then
update empleado
set salario = salario + salario * pbono
where numempleado = pnumempleado;
dbms_output.put_line ('empleado '|| pnumempleado || 'bono' || pbono || 'aumento' || vsalario * pbono);
else
dbms_output.put_line ('empleado' || pnumempleado || 'no aplico bono');
end if;
end;
Suscribirse a:
Entradas (Atom)