Exercice SQL 3

Fermé
Suad_5641 Messages postés 2 Date d'inscription mercredi 2 décembre 2020 Statut Membre Dernière intervention 9 février 2021 - 8 févr. 2021 à 22:25
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 - 8 févr. 2021 à 23:39
j'ai les tables suivantes :
            • Types*******************************

create type table_matiere as (id_Matiere int,Note float);
create type Sem as enum ('S1','S2');
            • Tables****************************

create table matiere (
id int primary KEY,
nom varchar(50),
coef int
);

create table etudiant (
mat varchar(6) primary key,
nom varchar(50),
prenom Varchar[3],
date_naiss date
);

create table notes(
note int primary key,
etud varchar(6),
semestre sem,
matiere table_matiere,
CONSTRAINT note_etud_fkey FOREIGN KEY(etud) REFERENCES etudiant(mat)
ON UPDATE CASCADE ON DELETE CASCADE
);

les questions :
1- S’assurer que les valeurs prises par (Matiere). Id_Matiere sont uniquement celles prises par id dans la table matiere ( cad on il ne faut pas ajouter une note d'une matiere qui n'existe pas dans la table matiere.
---> mon repense:
create trigger notes_trigger
on matiere
for insert , update
as
begin
if( select id from matiere x != inserted i )
begin
rollback;

2- Donner le code de la fonction GetMoyenne :
prendre en considération le cas où plusieurs notes relatives à la même matière peuvent être saisies.
---> CREATE FUNCTION Getmoyenne(m varchar(6)) RETURNS float AS
DECLARE
v float; v1 matiere.coef%TYPE ;
begin

SELECT into v1 sum(coef) from notes,matiere where etud=m and (matiere).id_Matiere = id;
SELECT into v sum(((matiere).Note*coef)/v1) FROM notes,matiere WHERE etud = m and id = (matiere).id_Matiere;

return v;
end;
' LANGUAGE plpgsql;
      • mais il ne fonctionne pas comme il faut
A voir également:

1 réponse

yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
8 févr. 2021 à 23:12
bonjour,
"ne fonctionne pas comme il faut": cela donne quoi, qu'attends-tu?
0
Suad_5641 Messages postés 2 Date d'inscription mercredi 2 décembre 2020 Statut Membre Dernière intervention 9 février 2021
8 févr. 2021 à 23:21
si par exemple j'ai deux notes dans la même matière , il les calculer comme deux notes de différentes matières.
ex:
1er matière avec coeff 3 les notes sont 19 et 17 , il fait 19*3+17*3 au lieu de (19+17 )*3/2
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471 > Suad_5641 Messages postés 2 Date d'inscription mercredi 2 décembre 2020 Statut Membre Dernière intervention 9 février 2021
8 févr. 2021 à 23:39
à ta place, si je voulais comprendre ce qui se passe, je ferais plutôt:
SELECT into v sum(((matiere).Note*coef)/v1), v1 FROM notes,matiere WHERE etud = m and id = (matiere).id_Matiere;

prends aussi un peu de temps pour nus montrer le résultat obtenu, ainsi que les données de départ.
0