146 - Disparador (Instead Off y after) |
Un club almacena los datos de sus socios en una tabla denominada "socios", los distintos cursos que dictan en "cursos" y las inscripciones de los distintos socios en los distintos cursos en "inscriptos". 1- Elimine las tablas si existen: if object_id('inscriptos') is not null drop table inscriptos; if object_id('socios') is not null drop table socios; if object_id('cursos') is not null drop table cursos; 2- Cree las tablas, con las siguientes estructuras: create table socios( documento char(8) not null, nombre varchar(30), domicilio varchar(30), constraint PK_socios primary key(documento) ); create table cursos( numero tinyint identity, deporte char(20), cantidadmaxima tinyint, constraint PK_cursos primary key(numero) ); create table inscriptos( documento char(8) not null, numerocurso tinyint, fecha datetime, constraint PK_inscriptos primary key(documento,numerocurso), constraint FK_inscriptos_documento foreign key (documento) references socios(documento), constraint FK_inscriptos_curso foreign key (numerocurso) references cursos(numero) ); Los cursos tiene un número que los identifica, y según el deporte, hay un límite de inscriptos (por ejemplo, en tenis, no pueden inscribirse más de 4 socios; en natación, solamente se aceptan 6 alumnos como máximo). Cuando un curso está completo, es decir, hay tantos inscriptos como valor tiene el campo "cantidadmaxima"), el socio queda inscripto en forma condicional. El club guarda esa información en una tabla denominada "condicionales" que luego analiza, porque si se inscriben muchos para un deporte determinado, se abrirá otro curso. 2- Elimine la tabla "condicionales" si existe: if object_id('condicionales') is not null drop table condicionales; 3- Cree la tabla, con la siguiente estructura: create table condicionales( documento char(8) not null, codigocurso tinyint not null, fecha datetime ); 4- Ingrese algunos registros en las tablas "socios", "cursos" e "inscriptos": insert into socios values('22222222','Ana Acosta','Avellaneda 800'); insert into socios values('23333333','Bernardo Bustos','Bulnes 345'); insert into socios values('24444444','Carlos Caseros','Colon 382'); insert into socios values('25555555','Mariana Morales','Maipu 234'); insert into socios values('26666666','Patricia Palacios','Paru 587'); insert into cursos values('tenis',4); insert into cursos values('natacion',6); insert into cursos values('basquet',20); insert into cursos values('futbol',20); insert into inscriptos values('22222222',1,getdate()); insert into inscriptos values('22222222',2,getdate()); insert into inscriptos values('23333333',1,getdate()); insert into inscriptos values('23333333',3,getdate()); insert into inscriptos values('24444444',1,getdate()); insert into inscriptos values('24444444',4,getdate()); insert into inscriptos values('25555555',1,getdate()); 5- Cree un trigger "instead of" para el evento de inserción para que, al intentar ingresar un registro en "inscriptos" controle que el curso no esté completo (tantos inscriptos a tal curso como su "cantidadmaxima"); si lo estuviese, debe ingresarse la inscripción en la tabla "condicionales" y mostrar un mensaje indicando tal situación. Si la "cantidadmaxima" no se alcanzó, se ingresa la inscripción en "inscriptos". 6- Inscriba un socio en un curso que no esté completo. Verifique que el trigger realizó la acción esperada consultando las tablas: select *from inscriptos; select *from condicionales; 7- Inscriba un socio en un curso que esté completo. Verifique que el trigger realizó la acción esperada consultando las tablas: select *from inscriptos; select *from condicionales;Ver solución