Advertisement
Guest User

Untitled

a guest
Mar 26th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.52 KB | None | 0 0
  1.  
  2.  
  3. 2.- Crear la tabla tnotas, según se muestra en la última página, sabiendo que: los atributos ciclo, curso y
  4. nú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
  9. valores comprendidos entre 0 y 10 ambos inclusive. (Hay que tener en cuenta que en el momento de
  10. la creación ya está creada la tabla talumno).
  11. 2.-
  12. create 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.  
  23. 3.- Crear un desencadenador que visualice los siguientes mensajes ‘Se ha modificado la nota 1’, ‘Se ha
  24. modificado la nota 2’ o ‘Se ha modificado la nota 3’, según que en la tabla de tnotas se modifique la
  25. nota1, nota2 o nota3, respectivamente.
  26. Si existiese un desencadenador previo con dicho nombre, se
  27. borrará.
  28.  
  29.  
  30. if exists (select name from sysobjects where name = 'nota' and type = 'tr')
  31.  
  32. drop trigger nota
  33. go
  34. create trigger nota on tnotas
  35. after update
  36. as
  37. BEGIN
  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'
  46. end
  47.  
  48. 4.- Crear un desencadenador que guarde una copia de seguridad cada vez que se haga una modificación
  49. en 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.  
  54. además del campo de ‘fech_mod’ que será la fecha correspondiente al
  55. día que se produce dicha modificación.
  56.  
  57. Si existiese un desencadenador previo con dicho nombre, se
  58. borrará.
  59.  
  60. (La tabla en la que se guardarán las copias de seguridad se llamará thistorico y no tendrá
  61. ningún campo clave ni ningún tipo de restricción).
  62.  
  63.  
  64. if exists (select name from sysobjects where name = 'trigger2' and type = 'tr')
  65.  
  66. drop trigger trigger2
  67. go
  68. create trigger trigger2 on tnotas
  69. after update
  70. as
  71. IF 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. )
  83. end
  84. update table thistorico (select * from tnotas) -- revisar--
  85.  
  86.  
  87.  
  88.  
  89. 5.- Crear una función que calcule la media aritmética de las tres notas, de la tabla tnotas, de los alumnos
  90. cuyo dni se pase como parámetro.
  91. Escribir la ejecución de dicha función, visualizando el nombre,
  92. apellidos, las tres notas y la media aritmética de las mismas.
  93.  
  94. if 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.  
  113. exec P_nota '999999999P'
  114.  
  115.  
  116. 6.- Crear una función definida por el usuario que nos desvuelva la nota media más alta obtenida por un
  117. alumno del ciclo cuyo código se pasa como parámetro.
  118.  
  119. Para el cálculo de la nota media, se utilizará la
  120. función del ejercicio anterior. Si existiese una función previa con dicho nombre, se borrará.
  121. Ejecutar
  122. dicha función a través de una select que nos muestre el nombre completo del ciclo, nombre y
  123. apellidos de alumnos así como sus tres notas y notamedia. (No podrá aparecer en la select de
  124. ejecución ninguna operación aritmética como atributo).
  125.  
  126.  
  127. if exists (select name from sysobjects where name = 'P_nota_max' and type = 'p')
  128. drop 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.  
  137. 7.- Crear un procedimiento ALMACENADO que nos devuelva número de alumnos matriculados como
  138. máximo en un curso, se hará a través de un cursor escrito en dicho procedimiento. Visualizar todos
  139. los ciclos que tengan matriculado dicho valor, utilizando el procedimiento descrito. En el momento
  140. de la ejecución se ha de asegurar que estamos en la base de datos BALUMNOS.
  141.  
  142.  
  143. if 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.  
  150. declare cursor2 cursor
  151. local
  152. keyset
  153. for select ciclo from tnotas order by ciclo
  154. declare @contador int
  155. declare @ciclo char(3)
  156. set @contador = 0
  157. declare @cursoanterior char(3)
  158. declare @cursoactual char(3)
  159. open cursor2
  160. declare @primero boolean
  161. fetch first from cursor2 into @ciclo
  162. while @@fetch_status = 0
  163. begin
  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
  183. end
  184. close cursor2
  185. deallocate cursor2
  186.  
  187. execute P_matriculados 4
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement