Triggers: Verificar que una persona del staff tenga un máximo de 3 carreras por organizar
Enviado por johan9609 • 2 de Noviembre de 2015 • Trabajo • 1.231 Palabras (5 Páginas) • 116 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;
set serverout on
declare
v_Piloto# number:='&v_Np';
v_Np varchar2(20);
v_Neq varchar2(20);
v_In# number(10);
begin
pilotos(v_Piloto#,v_Np,v_Neq,v_In#);
dbms_output.put_line('Nombre del piloto:'||v_Np||'Nombre del equipo:'||v_Neq||'Numero de Inscripcion:'||v_In#);
end;
2.Procedimiento en el que se ingrese el nombre del equipo y se genere el reporte de dos cursores, en el primero se muestre el nombre y
código del piloto y en el segundo cursor (anidado) imprimir el número del equipo y el numero de la inscripcion.
create or replace procedure ingresos
(v_Neq in varchar2)
as
v_Np varchar2(10);
v_Piloto# number(10);
v_Cra# number(10);
v_In# number (10);
v_Ncra varchar2(10);
cursor p_w is
select Np,Piloto#
from piloto p,equipo e
where p.Eq#=e.Eq# and Neq=v_Neq;
cursor p_r is
select Cra#,s.In#
from carrera c,inscripcion n,participa s
where s.In#=n.In# and c.Ncra=n.Ncra and s.Piloto#=v_Piloto#;
begin
open p_w;
fetch p_w into v_Np,v_Piloto#;
while p_w% found loop
DBMS_output.put_line(v_Np||''||v_Piloto#);
open p_r;
fetch p_r into v_Cra#,v_In#;
while p_r% found loop
DBMS_output.put_line(v_Cra#||''||v_In#);
fetch p_r into v_Cra#,v_In#;
end loop;
close p_r;
fetch p_w into v_Np,v_Piloto#;
end loop;
close p_w;
end;
Set Serveroutput on
DECLARE
v_Neq varchar2(20):='&v_Neq';
v_Np varchar2(20);
v_Piloto# number(10);
v_Cra# number(10);
v_In# number (10);
begin
ingresos(v_Neq);
DBMS_output.put_line('Nombre del piloto'||v_Np||'Codigo del piloto'||v_Piloto#||'Numero de la carrera'||v_Cra#||'Numero
...