Triggers: Verificar que una persona del staff tenga un máximo de 3 carreras por organizar
Enviado por johan9609 • 2 de Noviembre de 2015 • Trabajos • 1.231 Palabras (5 Páginas) • 101 Visitas
Triggers
1.Verificar que una persona del staff tenga un máximo de 3 carreras por organizar
create or replace trigger verificastaff
before update or insert
on organiza
referencing old as o new as n
for each row
declare
v_maxcarreras number(10);
v_total number(10);
begin
select Nocarrera
into v_maxcarreras
from staff s
where s.Nstaff=:n.Nstaff;
if v_maxcarreras = 3 then
raise_application_error(-20001,'El staff no le permite organizar mas carreras');
else
update staff
set Nocarrera=Nocarrera+1
where Nstaff=:n.Nstaff;
end if;
end;
update staff
set Nocarrera=2
where Nstaff='Carlos';
insert into staff
set Nocarrera=Nocarrera+2
where Nstaff='Carlos';
insert into staff values (18,'c','b',1,2,'m',1,0);
select * from staff
where Nstaff='c';
insert into system.organiza values ('c','4');
2. Verificar que una carrera tenga un maximo de 200 inscripciones y un minimo de 50
create or replace trigger Verificarcarrera
before insert or update
on carrera
referencing old as o new as n
for each row
declare
begin
if :n.noinscrip>200 or :n.noinscrip<50 then
raise_application_error(-20001,'La inscripcion no se puede validar');
end if;
if updating then
if :n.noinscrip=201 then
raise_application_error(-20002,'La inscripcion debe ser menor a 200');
end if;
end if;
end;
insert into carrera(Cra#,Ncra,Fechacra,Noinscrip)
select Cra#,Ncra,Fechacra,Noinscrip
from carrera
where Noinscrip<200;
3.Insertar o actualizar asegurando que el #piloto o el #vehiculo no exista
create or replace trigger Existepilotos
before insert or update
on conduce
referencing old as o new as n
for each row
declare
v_verificara number;
v_verificarb number;
begin
select count(*) into v_verificara
from piloto p
where p.Piloto#=:n.Piloto#;
select count(*) into v_verificarb
from vehiculo v
where v.Vh#=:n.Vh#;
if v_verificara=0 or v_verificarb=0 then
raise_application_error(-20001,'Ni el piloto ni el vehiculo existe');
end if;
end;
insert into conduce(Vh#,Piloto#)
select Vh#,Piloto#
from conduce c
where Vh#=1 or Piloto#=0;
Stored procedures
1.Procedimiento en el que se ingrese el código del piloto y que devuelva el nombre del piloto, el nombre del equipo y el número de la inscripcion de la carrera
a la cual está inscrito, manejando excepción.
create or replace procedure pilotos
(p_Piloto# in number,p_Np out varchar2,p_Neq out varchar2, p_In# out number)
as
begin
select Np,Neq,In#
into p_Np,p_Neq, p_In#
from equipo e, piloto p, inscripcion i
where p.Eq#=e.Eq# and e.Eq#=i.Eq# and Piloto#=p_Piloto#;
exception
when no_data_found then
DBMS_output.put_line('El piloto no existe');
when others then DBMS_output.put_line('error');
end;
...