ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Triggers: Verificar que una persona del staff tenga un máximo de 3 carreras por organizar


Enviado por   •  2 de Noviembre de 2015  •  Trabajo  •  1.231 Palabras (5 Páginas)  •  116 Visitas

Página 1 de 5

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

...

Descargar como (para miembros actualizados) txt (9 Kb) pdf (57 Kb) docx (19 Kb)
Leer 4 páginas más »
Disponible sólo en Clubensayos.com