Td corrigé Exercice 1 - Tecfa pdf

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 d’arrivé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 d’arrivée:’|| m_villearr) ;





END ;
Exercice 3
Ecrivez un bloc PL/SQL pour :
a) Définir une exception définie par l’utilisateur pour la règle : « il y a un seul chauffeur qui conduit une voiture au cours d’un trajet »,
b) Entrer un nouveau tuple de TR_NOV,
c) Insérer ce tuple,
d) Validez cette règle. Si elle n’est pas valide, lancer l’exception 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 d’un 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 l’analyse 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;