TP1 : Gestion d un parc de véhicules (PARCVEH) 1. Ecrire un bloc PL/SQL pour : a. Entrer un nom d une ville. nville trajet.villedep%type; nville := &Nom_de_ville ; b. Affichez le nombre moyen, le nombre minimum, le nombre maximum de kilomètres des trajets qui sont partis de cette ville. nmoykm nminkm nmaxkm SELECT AVG(nbkm) INTO nmoykm FROM trajet WHERE villedep = nville; SELECT MIN(nbkm) INTO nmoykm FROM trajet WHERE villedep = nville; SELECT MAX(nbkm) INTO nmoykm FROM trajet WHERE villedep = nville; DBMS_OUTPUT.PUT_LINE ( Nombre moyen: TO_CHAR(nmoykm)); DBMS_OUTPUT.PUT_LINE ( Nombre minimum: TO_CHAR(nminkm)); DBMS_OUTPUT.PUT_LINE ( Nombre maximum: TO_CHAR(nmaxkm));
2. Ecrire un bloc PL/SQL pour : a. Entrer un an. annee trajet.datetrajet%type; annee := &Annee ; b. Affichez le numéro et la marque de la voiture qui a effectué le plus de trajets dans cette année. Affichez aussi son nombre de trajets effectués nov mv nbtraj CHAR(12); CHAR(20); SELECT
3. Ecrire un bloc PL/SQL pour afficher une phrase à annoncer aujourd hui. Par exemple : Aujourd hui est mardi, 16 Avril 2002 pour le date 16.04.2002 Conseil : Utiliser SYSDATE avec les formats : W : jour de semaine ; DD : jour, MM : mois et YYYY : année jour_de_semaine jour_en_caractere jour mois mois_en_caractere annee NUMBER(2); CHAR(10); NUMBER(2); NUMBER(2); CHAR(10); NUMBER(4); SELECT to_char (sysdate, W ) INTO jour_de_semaine FROM dual; IF jour_de_semaine = 1 THEN jour_en_caractere := dimanche ; ELSEIF jour_de_semaine = 2 THEN jour_en_caractere := lundi ; ELSEIF jour_de_semaine = 3 THEN jour_en_caractere := mardi ; ELSEIF jour_de_semaine = 4 THEN jour_en_caractere := mercredi ; ELSEIF jour_de_semaine = 5 THEN jour_en_caractere := jeudi ; ELSEIF jour_de_semaine = 6 THEN jour_en_caractere := vendredi ; ELSE jour_de_semaine = 7 THEN jour_en_caractere := samedi ; SELECT to_char (sysdate, MM ) INTO mois FROM dual; IF mois = 01 THEN mois_en_caractere := janvier ; ELSEIF mois = 02 THEN mois_en_caractere := fevrier ; ELSEIF mois = 03 THEN mois_en_caractere := mars ; ELSEIF mois = 04 THEN mois_en_caractere := avril ; ELSEIF mois = 05 THEN mois_en_caractere := mai ; ELSEIF mois = 06 THEN mois_en_caractere := juin ; ELSEIF mois = 07 THEN mois_en_caractere := juillet ; ELSEIF mois = 08 THEN mois_en_caractere := aout ; ELSEIF mois = 09 THEN mois_en_caractere := septembre ; ELSEIF mois = 10 THEN mois_en_caractere := octobre ; ELSEIF mois = 11 THEN mois_en_caractere := novembre ; ELSE mois = 12 THEN mois_en_caractere := decembre ; DBMS_OUTPUT.PUT_LINE ( Aujourd hui est jour_en_caractere, jour mois_en_caractere annee);
4. Ecrire un bloc PL/SQL pour : a. Entrer un chiffre. un_chiffre INTEGER un_chiffre := '&Entrer_un_chiffre'; b. Affichez la table de multiplication de ce chiffre. un_chiffre ii multiple INTEGER; INTEGER; INTEGER; un_chiffre := &Entrer_un_chiffre ; ii := 1; LOOP multiple := un_nombre * ii; ii := ii + 1; EXIT WHEN ii > 10; END LOOP; DBMS_OUTPUT.PUT_LINE ( Table_de_multiplication: multiple);
5. Ecrire un bloc PL/SQL pour : a. Entrer un numéro de trajet. notraj INTEGER notraj := '&Numero_de_trajet'; b. Si ce numéro existe déjà dans la table TRAJET, affichez toutes ses informations. Si non, affichez une phrase comme suit Ce numéro n existe pas. IF notraj IN trajet.notraj THEN SELECT * FROM trajet; ELSE existe_pas; IF SELECT * FROM trajet THEN DBMS_OUTPUT.PUT_LINE (* FROM trajet); ELSE DBMS_OUTPUT.PUT_LINE ('Ce numéro n'existe pas');
6. Ecrire un bloc PL/SQL pour : a. Entrez des informations d une nouvelle réparation (c.à.d NOREP, NOV, NOG, TYPREP, PX, KMCPT). TYPE reparation_type IS RECORD (norep NUMBER(4), nov CHAR(12), nog NUMBER(3), typerep CHAR(12), px NUMBER(12,2), kmcpt NUMBER(10)); une_reparation reparation_type; une_reparation.norep := &Numero_reparation'; une_reparation.nov := '&Numero_voiture'; une_reparation.nog := '&Numero_garage'; une_reparation.typerep := '&Type_reparation'; une_reparation.px := '&Prix_reparation'; une_reparation.kmcpt := '&kilometres_au_compteur'; INSERT INTO reparation VALUES (une_reparation.norep, une_reparation.nov, une_reparation.nog, une_reparation.typerep, une_reparation.px, une_reparation.kmcpt); END ; b. Validez que NOV existe déjà dans la table VOITURE ou pas. i. Si oui, créer ce nouveau tuple correspondant de la table REPARATION. ii. Si non, affichez un message d erreur.