Exercice 1 - Tecfa
TD 9 CORRIGE. Corrigé exercice 1 : Nous sommes dans le cas : 2 échantillons
pairés (ce sont les mêmes sujets qui passent deux fois le test, avant et après ...
part of the document
e départ, les ville darrivée des trajets qui ont été effectués à cette date. Affichez aussi les nombres des voitures participées et les totaux des personnes transportées de ces trajets par chaque trajet.
DECLARE
m_notraj NUMBER(3,0) ;
m_datetrajet DATE
m_villedep CHAR(20) ;
m_villearr CHAR(20) ;
nb_voitures INTEGER
nbperstraj INTEGER
de_jour DATE
a_jour DATE
BEGIN
de_jour := &entrez_date_de_commencement ;
a_jour := &entrez_date_de_terminaison ;
SELECT notraj, datetrajet, villedep, villearr
INTO m_notrajet, m_datetrajet, m_villedep, m_villearr
FROM trajet
WHERE m_datetrajet BETWEEN de_jour AND a_jour ;
SELECT COUNT (v.nov) INTO nb_voitures FROM voiture v
WHERE v.nov IN (
SELECT tv.nov
FROM tr_nov tv, trajet tr
WHERE (tv.notraj = tr.notraj)
DBMS_OUTPUT.PUT_LINE(Numéros de trajet:|| m_notraj) ;
DBMS_OUTPUT.PUT_LINE(Date du trajet:|| m_datetrajet) ;
DBMS_OUTPUT.PUT_LINE(Villes de départ:|| m_villedep) ;
DBMS_OUTPUT.PUT_LINE(Villes darrivée:|| m_villearr) ;
END ;
Exercice 3
Ecrivez un bloc PL/SQL pour :
a) Définir une exception définie par lutilisateur pour la règle : « il y a un seul chauffeur qui conduit une voiture au cours dun trajet »,
b) Entrer un nouveau tuple de TR_NOV,
c) Insérer ce tuple,
d) Validez cette règle. Si elle nest pas valide, lancer lexception et annuler toutes les actions appliquées
DECLARE
pas_un_chauffeur_une_voiture_un trajet EXCEPTION ;
notraj INTEGER;
nov CHAR(20);
nch NUMBER(3,0);
nbperstr NUMBER (2,0);
BEGIN
notraj := &numero_de_trajet ;
nov := &numero_de_voiture ;
nch := &numero_de_chauffeur ;
nbperstr := &nombre_de_personnes_transportées ;
INSERT INTO tr_nov
VALUES (notraj, nov, nch, nbperstr);
EXCEPTION
WHEN pas_un_chaufeur_une_voiture_un_trajet THEN
ROLLBACK [TO SAVEPOINT]
DBMS_OUTPUT.PUT_LINE(Il doit y avoir un seul chauffeur qui conduit une voiture au cours dun trajet) ;
END ;
Exercice 4
Ecrivez un bloc PL/SQL pour valider la règle : «le nombre de passagers transportés pendant une journée doit être inférieur 50 »
( Affichez tous les trajets et les voitures qui transgressent cette règle (les numéros de trajet et les numéros de voiture).
DECLARE
nb_passagers_inferieur_50 EXCEPTION ;
m_notraj INTEGER ;
m_nov CHAR(12) ;
m_nbperstr NUMBER(2,0);
une_journee DATE
datetrajet DATE
plus_de_50 INTEGER;
BEGIN
une_journee := TRIM(&entrez_une_date)
SELECT MAX(COUNT(tv.m_nbperstr)) INTO plus_de_50
FROM tr_nov tv, trajet tr
WHERE (tv.nbperstr = tr.nbperstr) AND (to_char(tr.datetrajet,DD) = une_journee)
GROUP BY tv.nov
IF plus_de_50 >= 50 THEN
SELECT tv.nov INTO m_nov
FROM tr_nov tv, trajet tr
WHERE (tv.nbperstr = tr.nbperstr) AND (to_char(tr.datetrajet,DD) = une_journee)
GROUP BY tv.nov
HAVING COUNT(tv.nbperstr) >= plus_de_50;
DBMS_OUTPUT.PUT_LINE(Trajet no:||m_notraj);
DBMS_OUTPUT.PUT_LINE(Voiture no:||m_nov);
ELSE plus_de_50 < 50
RAISE nb_passagers_inferieur_50
END IF ;
EXCEPTION
WHEN nb_passagers_inferieur_50 THEN
DBMS_OUTPUT.PUT_LINE(Le nombre de passagers transportés cette journée est inférieur à 50 pour toutes les voitures et tous les trajets) ;
END ;
Exercice 5
Faites la synthèse des trajets pendant une année pour lanalyse statistique les nombre des trajets effectués par mois et ville de départ:
a) Entrer une année ,
b) Afficher un rapport comme suit :
DECLARE
une_annee NUMBER(4)
un_mois NUMBER(2)
villedep CHAR(20)
nbtrajet NUMBER(2)
BEGIN
une_annee := TRIM(&Entrez_une_annee) ;
DBMS_OUT_PUT.PUT(SYTHESE DES TRAJETS) ;
DBMS_OUT_PUT.NEW_LINE;
DBMS_OUT_PUT.PUT_LINE(Année: ||TO_CHAR(une_annee, YYYY);
DBMS_OUT_PUT.NEW_LINE;
DBMS_OUT_PUT.PUT(VILLE DEPART) ;
DBMS_OUT_PUT.PUT(TO_CHAR(un_mois, MM);
DBMS_OUT_PUT.PUT(TO_CHAR(un_mois,MM);
DBMS_OUT_PUT.PUT(TO_CHAR(un_mois,MM);
DBMS_OUT_PUT.PUT(TO_CHAR(un_mois,MM);
DBMS_OUT_PUT.PUT(TO_CHAR(un_mois,MM);
DBMS_OUT_PUT.PUT(TO_CHAR(un_mois, MM);
DBMS_OUT_PUT.PUT(TO_CHAR(un_mois,MM);
DBMS_OUT_PUT.PUT(TO_CHAR(un_mois, MM);
DBMS_OUT_PUT.PUT(TO_CHAR(un_mois,MM);
DBMS_OUT_PUT.PUT(TO_CHAR(un_mois, MM);
DBMS_OUT_PUT.PUT(TO_CHAR(un_mois,MM);
DBMS_OUT_PUT.PUT(TO_CHAR(un_mois, MM);
DBMS_OUT_PUT.NEW_LINE;
DBMS_OUT_PUT.PUT(TO_CHAR(villedep)) ;
DBMS_OUT_PUT.PUT(TO_CHAR(nbtrajet,99);
DBMS_OUT_PUT.PUT(TO_CHAR(nbtrajet,99);
DBMS_OUT_PUT.PUT(TO_CHAR(nbtrajet,99);
DBMS_OUT_PUT.PUT(TO_CHAR(nbtrajet,99);
DBMS_OUT_PUT.PUT(TO_CHAR(nbtrajet,99);
DBMS_OUT_PUT.PUT(TO_CHAR(nbtrajet,99);
DBMS_OUT_PUT.PUT(TO_CHAR(nbtrajet,99);
DBMS_OUT_PUT.PUT(TO_CHAR(nbtrajet,99);
DBMS_OUT_PUT.PUT(TO_CHAR(nbtrajet,99);
DBMS_OUT_PUT.PUT(TO_CHAR(nbtrajet,99);
DBMS_OUT_PUT.PUT(TO_CHAR(nbtrajet,99);
DBMS_OUT_PUT.PUT(TO_CHAR(nbtrajet,99);
DBMS_OUT_PUT.NEW_LINE;
END;