· 6 years ago · Mar 26, 2019, 05:14 PM
1
2
32.- Crear la tabla tnotas, según se muestra en la última página, sabiendo que: los atributos ciclo, curso y
4número deberán tener algún contenido y los tres formarán parte de la clave primaria.
5
6
7
8 Y que los atributos, nota1, nota2 y nota3 solamente podrán tener
9valores comprendidos entre 0 y 10 ambos inclusive. (Hay que tener en cuenta que en el momento de
10la creación ya está creada la tabla talumno).
112.-
12create table tnotas(
13 ciclo char(3) not null,
14 curso int not null,
15 numero int not null,
16 nota1 int not null check(nota1>0 and nota1<10),
17 nota2 int not null check(nota1>0 and nota1<10),
18 nota3 int not null check(nota1>0 and nota1<10),
19 primary key(ciclo,curso,numero)
20)
21
22
233.- Crear un desencadenador que visualice los siguientes mensajes ‘Se ha modificado la nota 1’, ‘Se ha
24modificado la nota 2’ o ‘Se ha modificado la nota 3’, según que en la tabla de tnotas se modifique la
25nota1, nota2 o nota3, respectivamente.
26 Si existiese un desencadenador previo con dicho nombre, se
27borrará.
28
29
30if exists (select name from sysobjects where name = 'nota' and type = 'tr')
31
32drop trigger nota
33go
34create trigger nota on tnotas
35after update
36as
37BEGIN
38 IF UPDATE(notas1)
39 print 'Se ha modificado la nota 1'
40
41 IF UPDATE(notas2)
42 print 'Se ha modificado la nota 2'
43
44 IF UPDATE(notas3)
45 print 'Se ha modificado la nota 3'
46end
47
484.- Crear un desencadenador que guarde una copia de seguridad cada vez que se haga una modificación
49en algún campo de la tabla de tnotas,
50
51 teniendo en cuenta que figurarán todos los campos de la misma
52(después de la modificación)
53
54además del campo de ‘fech_mod’ que será la fecha correspondiente al
55dÃa que se produce dicha modificación.
56
57 Si existiese un desencadenador previo con dicho nombre, se
58borrará.
59
60(La tabla en la que se guardarán las copias de seguridad se llamará thistorico y no tendrá
61ningún campo clave ni ningún tipo de restricción).
62
63
64if exists (select name from sysobjects where name = 'trigger2' and type = 'tr')
65
66drop trigger trigger2
67go
68create trigger trigger2 on tnotas
69after update
70as
71IF not EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name = 'thistorico')
72 begin
73 create table thistorico (
74 ciclo char(3),
75 curso int,
76 numero int,
77 dni char(9),
78 nota1 int ,
79 nota2 int ,
80 nota3 int ,
81 fech_mod datetime not null default dateadd(dd,15,getdate())
82 )
83end
84update table thistorico (select * from tnotas) -- revisar--
85
86
87
88
895.- Crear una función que calcule la media aritmética de las tres notas, de la tabla tnotas, de los alumnos
90cuyo dni se pase como parámetro.
91Escribir la ejecución de dicha función, visualizando el nombre,
92apellidos, las tres notas y la media aritmética de las mismas.
93
94if exists (select name from sysobjects where name = 'P_nota' and type = 'p')
95 drop procedure P_nota
96 go
97 create procedure P_nota @dni varchar(9)
98 as
99 declare @n1 int, @n2 int, @n3 int,@media int
100 set @n1 = 0
101 set @n2 = 0
102 set @n3 = 0
103 set @media = 0
104 set @n1 = select nota1 from tnotas where (dni=@dni)
105 set @n2 = select nota2 from tnotas where (dni=@dni)
106 set @n3 = select nota3 from tnotas where (dni=@dni)
107
108 set @media = (@n1+@n2+@n3)/3
109 print @media
110
111
112
113exec P_nota '999999999P'
114
115
1166.- Crear una función definida por el usuario que nos desvuelva la nota media más alta obtenida por un
117alumno del ciclo cuyo código se pasa como parámetro.
118
119 Para el cálculo de la nota media, se utilizará la
120función del ejercicio anterior. Si existiese una función previa con dicho nombre, se borrará.
121 Ejecutar
122dicha función a través de una select que nos muestre el nombre completo del ciclo, nombre y
123apellidos de alumnos asà como sus tres notas y notamedia. (No podrá aparecer en la select de
124ejecución ninguna operación aritmética como atributo).
125
126
127if exists (select name from sysobjects where name = 'P_nota_max' and type = 'p')
128drop procedure P_nota_max
129 go
130 create procedure P_nota_max @dni int
131 as
132 declare @max int
133 select
134 --revisar--
135
136
1377.- Crear un procedimiento ALMACENADO que nos devuelva número de alumnos matriculados como
138máximo en un curso, se hará a través de un cursor escrito en dicho procedimiento. Visualizar todos
139los ciclos que tengan matriculado dicho valor, utilizando el procedimiento descrito. En el momento
140de la ejecución se ha de asegurar que estamos en la base de datos BALUMNOS.
141
142
143if exists (select name from sysobjects where name = 'P_matriculados' and type = 'p')
144 drop procedure P_matriculados
145 go
146 create procedure P_Matriculados @curso int
147 as
148 --inicio del cursor
149
150declare cursor2 cursor
151local
152keyset
153for select ciclo from tnotas order by ciclo
154declare @contador int
155declare @ciclo char(3)
156set @contador = 0
157declare @cursoanterior char(3)
158declare @cursoactual char(3)
159open cursor2
160declare @primero boolean
161fetch first from cursor2 into @ciclo
162while @@fetch_status = 0
163begin
164
165
166
167 begin
168 if(@cursoanterior != @cursoactual)
169 begin
170 set @cursoactual = @ciclo
171 set @contador=@contador +1
172 set @cursoanterior = @cursoactual
173 end
174 else
175 begin
176 if(@contador>@curso)
177 print @cursoanterior
178 set @contador = 0
179 end
180
181 fetch next from cursor2 into @ciclo
182 end
183end
184close cursor2
185deallocate cursor2
186
187execute P_matriculados 4