Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 2.- Crear la tabla tnotas, según se muestra en la última página, sabiendo que: los atributos ciclo, curso y
- número deberán tener algún contenido y los tres formarán parte de la clave primaria.
- Y que los atributos, nota1, nota2 y nota3 solamente podrán tener
- valores comprendidos entre 0 y 10 ambos inclusive. (Hay que tener en cuenta que en el momento de
- la creación ya está creada la tabla talumno).
- 2.-
- create table tnotas(
- ciclo char(3) not null,
- curso int not null,
- numero int not null,
- nota1 int not null check(nota1>0 and nota1<10),
- nota2 int not null check(nota1>0 and nota1<10),
- nota3 int not null check(nota1>0 and nota1<10),
- primary key(ciclo,curso,numero)
- )
- 3.- Crear un desencadenador que visualice los siguientes mensajes ‘Se ha modificado la nota 1’, ‘Se ha
- modificado la nota 2’ o ‘Se ha modificado la nota 3’, según que en la tabla de tnotas se modifique la
- nota1, nota2 o nota3, respectivamente.
- Si existiese un desencadenador previo con dicho nombre, se
- borrará.
- if exists (select name from sysobjects where name = 'nota' and type = 'tr')
- drop trigger nota
- go
- create trigger nota on tnotas
- after update
- as
- BEGIN
- IF UPDATE(notas1)
- print 'Se ha modificado la nota 1'
- IF UPDATE(notas2)
- print 'Se ha modificado la nota 2'
- IF UPDATE(notas3)
- print 'Se ha modificado la nota 3'
- end
- 4.- Crear un desencadenador que guarde una copia de seguridad cada vez que se haga una modificación
- en algún campo de la tabla de tnotas,
- teniendo en cuenta que figurarán todos los campos de la misma
- (después de la modificación)
- además del campo de ‘fech_mod’ que será la fecha correspondiente al
- día que se produce dicha modificación.
- Si existiese un desencadenador previo con dicho nombre, se
- borrará.
- (La tabla en la que se guardarán las copias de seguridad se llamará thistorico y no tendrá
- ningún campo clave ni ningún tipo de restricción).
- if exists (select name from sysobjects where name = 'trigger2' and type = 'tr')
- drop trigger trigger2
- go
- create trigger trigger2 on tnotas
- after update
- as
- IF not EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name = 'thistorico')
- begin
- create table thistorico (
- ciclo char(3),
- curso int,
- numero int,
- dni char(9),
- nota1 int ,
- nota2 int ,
- nota3 int ,
- fech_mod datetime not null default dateadd(dd,15,getdate())
- )
- end
- update table thistorico (select * from tnotas) -- revisar--
- 5.- Crear una función que calcule la media aritmética de las tres notas, de la tabla tnotas, de los alumnos
- cuyo dni se pase como parámetro.
- Escribir la ejecución de dicha función, visualizando el nombre,
- apellidos, las tres notas y la media aritmética de las mismas.
- if exists (select name from sysobjects where name = 'P_nota' and type = 'p')
- drop procedure P_nota
- go
- create procedure P_nota @dni varchar(9)
- as
- declare @n1 int, @n2 int, @n3 int,@media int
- set @n1 = 0
- set @n2 = 0
- set @n3 = 0
- set @media = 0
- set @n1 = select nota1 from tnotas where (dni=@dni)
- set @n2 = select nota2 from tnotas where (dni=@dni)
- set @n3 = select nota3 from tnotas where (dni=@dni)
- set @media = (@n1+@n2+@n3)/3
- print @media
- exec P_nota '999999999P'
- 6.- Crear una función definida por el usuario que nos desvuelva la nota media más alta obtenida por un
- alumno del ciclo cuyo código se pasa como parámetro.
- Para el cálculo de la nota media, se utilizará la
- función del ejercicio anterior. Si existiese una función previa con dicho nombre, se borrará.
- Ejecutar
- dicha función a través de una select que nos muestre el nombre completo del ciclo, nombre y
- apellidos de alumnos así como sus tres notas y notamedia. (No podrá aparecer en la select de
- ejecución ninguna operación aritmética como atributo).
- if exists (select name from sysobjects where name = 'P_nota_max' and type = 'p')
- drop procedure P_nota_max
- go
- create procedure P_nota_max @dni int
- as
- declare @max int
- select
- --revisar--
- 7.- Crear un procedimiento ALMACENADO que nos devuelva número de alumnos matriculados como
- máximo en un curso, se hará a través de un cursor escrito en dicho procedimiento. Visualizar todos
- los ciclos que tengan matriculado dicho valor, utilizando el procedimiento descrito. En el momento
- de la ejecución se ha de asegurar que estamos en la base de datos BALUMNOS.
- if exists (select name from sysobjects where name = 'P_matriculados' and type = 'p')
- drop procedure P_matriculados
- go
- create procedure P_Matriculados @curso int
- as
- --inicio del cursor
- declare cursor2 cursor
- local
- keyset
- for select ciclo from tnotas order by ciclo
- declare @contador int
- declare @ciclo char(3)
- set @contador = 0
- declare @cursoanterior char(3)
- declare @cursoactual char(3)
- open cursor2
- declare @primero boolean
- fetch first from cursor2 into @ciclo
- while @@fetch_status = 0
- begin
- begin
- if(@cursoanterior != @cursoactual)
- begin
- set @cursoactual = @ciclo
- set @contador=@contador +1
- set @cursoanterior = @cursoactual
- end
- else
- begin
- if(@contador>@curso)
- print @cursoanterior
- set @contador = 0
- end
- fetch next from cursor2 into @ciclo
- end
- end
- close cursor2
- deallocate cursor2
- execute P_matriculados 4
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement