Sunteți pe pagina 1din 27

Rocio Contreras Aguila Segundo Semestre 2013

Resumen breve materia Desencadenadores clase anterior Ejercicios resueltos Desencadenadores Desarrollo actividad en clases utilizando la funcin que valida el Rut ( tarea 3 c/nota).
Recordatorio:
Lunes 16 Solemne 2 tema: Vistas, funciones y triggers.

Una empresa almacena los datos de sus empleados en una tabla denominada "empleados" y en otra tabla llamada "secciones", el cdigo de la seccin y el sueldo mximo de cada una de ellas.

if object_id('empleados') is not null


drop table empleados; if object_id('secciones') is not null drop table secciones;

create table secciones( codigo int identity, nombre varchar(30), sueldomaximo decimal(8,2), constraint PK_secciones primary key(codigo) ); create table empleados( documento char(8) not null, nombre varchar(30) not null, domicilio varchar(30), codigoseccion int not null, sueldo decimal(8,2), constraint PK_empleados primary key(documento), constraint FK_empelados_seccion foreign key (codigoseccion) references secciones(codigo) );

insert into secciones values('Administracion',1500); insert into secciones values('Sistemas',2000); insert into secciones values('Secretaria',1000); insert into empleados values('22222222','Ana Acosta','Avellaneda 88',1,1100); insert into empleados values('23333333','Bernardo Bustos','Bulnes 345',1,1200); insert into empleados values('24444444','Carlos Caseres','Colon 674',2,1800); insert into empleados values('25555555','Diana Duarte','Colon 873',3,1000);

create trigger dis_empleados_insertar on empleados for insert as declare @maximo decimal(8,2) set @maximo=(select sueldomaximo from secciones join inserted on inserted.codigoseccion=secciones.codigo) if (@maximo<(select sueldo from inserted)) begin declare @mensaje varchar(40) set @mensaje='El sueldo debe ser menor a '+cast(@maximo as char(8)) raiserror(@mensaje, 16, 1) rollback transaction end;

Revisin:

A) select *from empleados


B) insert into empleados values('26666666','Federico Fuentes','Francia 938',2,1000)

C) insert into empleados values('27777777','Gaston Garcia','Guemes 366',3,1200)


D) select *from empleados; insert into empleados values('27777777','Gaston Garcia','Guemes 366',9,1200) E) select *from empleados

Un club de barrio almacena los datos de sus socios en una tabla llamada "socios", los datos de las inscripciones en una tabla denominada "inscritos" y en una tabla "morosos" almacena el documento de los socios inscriptos que deben matrcula.

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 inscritos( documento char(8) not null, deporte varchar(30) not null, matricula char(1), constraint CK_inscritos check (matricula in ('s','n')), constraint PK_inscritos primary key (documento,deporte), constraint FK_inscritos_documento foreign key(documento) references socios (documento) );
create table morosos( documento char(8) not null );

insert into insert into 234'); insert into insert into 483');
insert insert insert insert insert into into into into into

socios values ('22222222','Ana Acosta','Avellaneda 800'); socios values ('23333333','Bernardo Bustos','Bulnes


socios values ('24444444','Carlos Caseros','Colon 321'); socios values ('25555555','Mariana Morales','Maipu inscritos inscritos inscritos inscritos inscritos values values values values values ('22222222','tenis','s'); ('22222222','natacion','n'); ('23333333','tenis','n'); ('24444444','tenis','s'); ('24444444','futbol','s');

insert into morosos values ('22222222'); insert into morosos values ('23333333');

create trigger dis_incritos_insertar on inscritos for insert as declare @doc char(8) select @doc= documento from inserted if exists (select *from morosos where documento=@doc) begin raiserror('No puede inscribir al socio porque es moroso', 16, 1) rollback transaction end;

create trigger dis_incritos_insertar2 on inscritos for insert as if (select matricula from inserted)='n' insert into morosos select documento from inserted;

create trigger dis_socios on socios for insert as raiserror('No puede ingresar nuevos socios', 16, 1) rollback transaction;

Primero, cree una tabla llamada Alumnos que contenga el rut del alumno, separado del dgito verificador, el nombre completo, la fecha de nacimiento, la direccin ( calle, nmero, ciudad, comuna) y sexo. Segundo, genere un trigger asociado a la tabla que al insertar un nuevo registro, valide que el dgito verificador del rut est correcto. Para esto, utilizar la funcin desarrollada en clases anteriores. Enviar por Blackboard como mensaje interno.

Una empresa almacena la informacin de sus empleados en dos tablas llamadas "empleados" y "secciones". 1.Crear una vista que arroje todos los datos de los empleados , nombre, seccin y cantidad de hijos.

Un profesor guarda las notas de sus alumnos de un curso en una tabla llamada "alumnos" que consta de los siguientes campos:

nombre (30 caracteres), nota (valor entero entre 0 y 10, puede ser nulo),

create table alumnos( nombre varchar(40), nota tinyint, constraint CK_alunos_nota check (nota>=0 and nota<=10) );

Ingresamos algunos registros:


into into into into into into into into alumnos alumnos alumnos alumnos alumnos alumnos alumnos alumnos values('Ana Acosta',8); values('Carlos Caseres',4); values('Federico Fuentes',2); values('Gaston Guzman',3); values('Hector Herrero',5); values('Luis Luna',10); values('Marcela Morales',7); values('Marcela Morales',null);

insert insert insert insert insert insert insert insert

Queremos mostrar el nombre y nota de cada alumno y en una columna extra llamada "condicion" empleamos un case que testee la nota y muestre un mensaje diferente si en dicho campo hay un valor:
- 0, 1, 2 3: 'libre'; - 4, 5 6: 'regular'; - 7, 8, 9 10: 'promocionado';

Esta es la sentencia: select nombre,nota, condicion= case nota when 0 then 'libre' when 1 then 'libre' when 2 then 'libre' when 3 then 'libre' when 4 then 'regular' when 5 then 'regular' when 6 then 'regular' when 7 then 'promocionado' when 8 then 'promocionado' when 9 then 'promocionado' when 10 then 'promocionado' end from alumnos;

Obtenemos la misma salida pero empleando el "case" con operadores de comparacin:

select nombre, nota, condicion= case when nota<4 then 'libre' when nota >=4 and nota<7 then 'regular' when nota>=7 then 'promocionado' else 'sin nota' end from alumnos;

Vamos a agregar el campo "condicion" a la tabla: alter table alumnos add condicion varchar(20);
Veamos la tabla: select *from alumnos;

Recordemos que se puede emplear una expresin "case" en cualquier lugar en el que pueda utilizar una expresin. Queremos actualizar el campo "condicion" para guardar la condicin de cada alumno segn su nota:

update alumnos set condicion= case when nota<4 then 'libre' when nota between 4 and 7 then 'regular' when nota >7 then 'promocionado' end;

Veamos la tabla actualizada:


select *from alumnos; Note que el alumno sin nota contiene "null" en "condicin" porque no especificamos valor para "else".

Mostramos la cantidad de alumnos libres, regulares y aprobados y en una columna extra mostramos un mensaje, ordenamos por cantidad:

select condicion, count(*) as cantidad,resultado= case condicion when 'libre' then 'repitentes' when 'regular' then 'rinden final' when 'promocionado' then 'no rinden final' else 'sin datos' end from alumnos group by condicion order by cantidad;

1. Genere una funcin que calcule los nmeros de la serie Fibonacci. Ej, quiero el nmero 5, debiera arrojar:5, si quiero el 3, debiera arrojar el 2.
Serie: 0 1 1 2 3 5 8 13 21 34 55

2. Genere una funcin que calcule el factorial de un nmero:


3! = 3 x 2 x 1 6! = 6 x 5 x 4 x 3 x 2 x 1 0! = 1

S-ar putea să vă placă și