Oracle - Ayuda ejercicio disparadores

   
Vista:

Ayuda ejercicio disparadores

Publicado por jorge (2 intervenciones) el 04/04/2016 10:15:43
Tengo que hacer esto:

Los profesores de programación quieren almacenar en una tabla (denominada notas) de una base de datos las prácticas y los exámenes que han realizado los alumnos.

En esta tabla tenemos los siguientes campos:

• Dni del alumno.

• Código del examen / práctica: será un código de la forma E02 (que significa el segundo examen) o P10 que será la pràctica10.

• Nota: Será un valor entero entre 0 y 10.

disparador:

Crea los disparadores necesarios para:

• Guardar automáticamente en una tabla (llamada notas_alumno) el dni del alumno, su media y un código de una letra indicando si en ese momento está aprobado (A) o suspendido (S). Para hacer la media total se pondera con un 75% la nota media de los exámenes y un 25% la nota media de las prácticas. Es necesario que las medias estén redondeadas a un decimal.

• Guardar en otra tabla (llamada notas_prueba) el código de la práctica o examen y la nota más alta obtenida por los alumnos. Esta tabla sólo tendrá dos campos: Código del examen / práctica y la nota (que será la máxima nota obtenida por un alumno).

Ten en cuenta que los disparadores se ejecutarán tanto para introducir nuevas notas, como para modificarlas en caso de revisión como de eliminarlas en caso de error.

Habrá que crear las tablas.

No tengo ni idea de hacerlo, necesito ayuda :(
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
-1
Responder

Ayuda ejercicio disparadores

Publicado por Rafael (178 intervenciones) el 04/04/2016 13:01:00
Y que llevas hecho??
Vaya donde necesitas la ayuda ?? O lo que pides es que te lo hagan???
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda ejercicio disparadores

Publicado por jorge (2 intervenciones) el 05/04/2016 10:18:51
Els professors de programació volen emmagatzemar en una taula (anomenada notes) d'una base de dades les pràctiques i els exàmens que han realitzat els alumnes.

En aquesta taula tenim els següents camps:

• Dni de l'alumne.

• Codi de l'examen/pràctica: serà un codi de la forma E02 (que voldrà dir el segon examen) o P10 que serà la pràctica10.

• Nota: Serà un valor enter entre 0 i 10.

DISPARADORS:

Crea els disparadors necessaris per:

• Guardar automàticament en una taula (anomenada notes_alumne) el dni de l'alumne, la seva mitjana i un codi d'una lletra indicant si en aquell moment està aprovat (A) o suspès (S). Per fer la mitjana total es pondera amb un 75% la nota mitjana dels exàmens i un 25% la nota mitjana de les pràctiques. Cal que les mitjanes estiguin arrodonides a un decimal.

• Guardar en una altra taula (anomenada notes_prova) el codi de la pràctica o examen i la nota més alta obtinguda pels alumnes. Aquesta taula només tindrà dos camps: Codi de l'examen/pràctica i la nota (que serà la màxima nota obtinguda per un alumne).

Tingues en compte que els disparadors s'executaran tant per introduir noves notes, com per modificar-les en cas de revisió com d'eliminar-les en cas d'error.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
Caldrà crear les taules.*/
 
declare media decimal (3,1)
set media:e+p
insert
if (media>=5) then
update notes
 
 
 
DROP DATABASE professors;
CREATE DATABASE professors;
USE professors;
 
 
CREATE TABLE IF NOT EXISTS notes
(dni_alumne varchar(9),
codi_examen varchar(5),
nota integer(2),
primary key(dni_alumne,codi_examen)
);
 
/*• Guardar automàticament en una taula (anomenada notes_alumne) el dni de l'alumne, la seva mitjana i un codi d'una lletra indicant si en aquell moment està aprovat (A) o suspès (S). 
Per fer la mitjana total es pondera amb un 75% la nota mitjana dels exàmens i un 25% la nota mitjana de les pràctiques. Cal que les mitjanes estiguin arrodonides a un decimal.*/
CREATE TABLE IF NOT EXISTS notes_alumne
(dni_alumne varchar(9) PRIMARY KEY,
mitjana decimal(3,1),
codi enum('A','S'),
foreign key (dni_alumne) references notes (dni_alumne)
);
 
 DELIMITER //
 CREATE trigger exercici1 after insert
 on notes for each row
	begin
		declare e decimal (3,1);
        declare p decimal (3,1);
 
            if ((select count(*) from notes_alumne where dni_alumne=new.dni_alumne)=0) then
				set e:=(select avg((nota)*0.75) from notes where (codi like 'E%')and(dni_alumne=new.dni_alumne));
                set p:=(select avg((nota)*0.25) from notes where (codi like 'P%')and(dni_alumne=new.dni_alumne));
				insert into notes_alumne (dni_alumne,mitjana) values (new.dni_alumne,(e+p));
                if (mitjana>=5 and dni_alumne=new.dni_alumne) then
					update notes_alumne set codi=('A') where dni_alumne=new.dni_alumne;
				else
					update notes_alumne set codi=('S') where dni_alumne=new.dni_alumne;
				end if;
			else
				update notes_alumne set mitjana=(e+p) where dni_alumne=new.dni_alumne;
                if (mitjana>=5 and dni_alumne=new.dni_alumne) then
					update notes_alumne set codi=('A') where dni_alumne=new.dni_alumne;
				else
					update notes_alumne set codi=('S') where dni_alumne=new.dni_alumne;
				end if;
			end if;
	END //
 
 DELIMITER;
 
 DELIMITER //
 CREATE trigger exercici1a after insert
 on notes for each row
	begin
		declare e decimal (3,1);
        declare p decimal (3,1);
 
            if (old.nota<>new.nota
			end if;
	END //
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar