Exercice SQL 3
Suad_5641
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
j'ai les tables suivantes :
create type table_matiere as (id_Matiere int,Note float);
create type Sem as enum ('S1','S2');
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;
- 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:
- Exercice SQL 3
- Ai suite 3 - Télécharger - Optimisation
- Picasa 3 - Télécharger - Albums photo
- Photorecit 3 - Télécharger - Visionnage & Diaporama
- Imagen 3 - Accueil - Applications & Logiciels
- Zelda 3 - Accueil - Guide jeu vidéo
1 réponse
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
"ne fonctionne pas comme il faut": cela donne quoi, qu'attends-tu?
"ne fonctionne pas comme il faut": cela donne quoi, qu'attends-tu?
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
prends aussi un peu de temps pour nus montrer le résultat obtenu, ainsi que les données de départ.