\documentclass[a4paper,11pt]{article} \usepackage[utf8x]{inputenc} \usepackage[T1]{fontenc} \usepackage[french]{babel} \usepackage[a4paper,hmargin=20mm,vmargin=30mm]{geometry}%\usepackage{fullpage} \usepackage{url} \usepackage{comment} \usepackage{fancyhdr}% fancy header \usepackage{fancyvrb} \fancypagestyle{monstyle}{ %\fancyhead{} \renewcommand{\headrulewidth}{1pt} %% %\renewcommand{\footrulewidth}{0.4pt} % \fancyhead[LE]{\slshape \thepage/ \pageref{LastPage}} %% \fancyhead[RO]{\slshape \thepage/ \pageref{LastPage}} %\fancyhf{} %\fancyhead[LE]{\slshape LE} %\fancyhead[CE]{\slshape CE} %\fancyhead[RE]{\slshape RE} \fancyhead[LO]{\bfseries 2018-2021 BD PLS/SQL\rightmark} %\fancyhead[CO]{\slshape APF} \fancyhead[RO]{\bfseries ~\leftmark } %% %\fancyfoot{} % \fancyfoot[LE,RO]{} \fancyfoot[CO,CE]{}%\slshape\thepage/\pageref{LastPage}} %% %\fancyfoot[LO,RE]{\small\slshape \ddmmyyyydate version du \today} } % \pagestyle{fancy} \usepackage{amsmath} \usepackage{amsthm} \theoremstyle{definition} \newtheorem{exercice}{Exercice} \pagestyle{monstyle} \usepackage{amsmath} \usepackage{amsthm} \newcommand{\code}[1]{\texttt{#1}} \begin{document} \begin{center} TP2 \end{center} \begin{SaveVerbatim}{VerbEnv} Catégorie : numéro libellé Num. véhic. Immat. Couleur Modèle XXXXX XX-9999-XX X...X X...X XXXXX XX-9999-XX X...X X...X XXXXX XX-9999-XX X...X X...X \end{SaveVerbatim} \begin{exercice} Afficher la liste des véhicules libres d’une catégorie dont on saisit le numéro. L’affichage se fera sous la forme : \begin{center} \fbox{\BUseVerbatim{VerbEnv}} \end{center} {\bf Cas d’erreur :} \begin{itemize} \item « catégorie inconnue » \item « Pas de véhicules libres dans cette catégorie » \end{itemize} \end{exercice} \begin{verbatim} ORA-01001: verifier que le curseur est ouver -- TEST -- CAT3 -- VE005 ff-6000-za noire Picasso -- CAT2 -- Pas de vehicule libre dans cette categorie -- CAT7 -- Pas de vehicule libre dans cette categorie DROP TABLE tligne; CREATE TABLE tligne (ligne varchar2(300)); set echo off; set verify off; set feed off; variable vcategorie char(4); prompt Entrer le numero de la categorie : accept vnocategorie declare dimmatriculation Tvehicule2017.immat%TYPE; dnoveh Tvehicule2017.noveh%TYPE; dcouleur Tvehicule2017.couleur%TYPE; dmodele Tvehicule2017.modele%TYPE; dcat number; cursor r is select noveh, immat, couleur, modele from Tvehicule2017 where nocat='&vnocategorie' and noveh not in (select noveh from Tlocation2017) order by noveh; begin select noveh, immat, couleur, modele into dnoveh, dimmatriculation, dcouleur, dmodele from Tvehicule2017 where nocat='&vnocategorie' and noveh not in (select noveh from Tlocation2017) order by noveh; select count(nocat) into dcat from Tcategorie2017 where nocat='&vnocategorie'; if dcat = 0 then insert into tligne values ('categorie inconnu'); end if; open r; fetch r into dnoveh, dimmatriculation, dcouleur, dmodele; while r%found loop insert into tligne values ( dnoveh ||' '||dimmatriculation||' '||dcouleur||' '||dmodele); fetch r into dnoveh, dimmatriculation, dcouleur, dmodele; end loop; close r; exception when no_data_found then insert into tligne values ('Pas de vehicule libre dans cette categorie'); end; . / select * from tligne; set echo on; set verify on; set feed on; \end{verbatim} \begin{exercice} Afficher la liste des locations en cours d’un client dont le numéro est saisi par l'utilisateur. La liste sera triée par catégorie puis par numéro de véhicule. En fin de liste il faut afficher le nombre de locations en cours du client. \begin{SaveVerbatim}{exo2} Propriétaire : numéro nom Catégorie num vehic. Date début Modèle XXXX XX-9999-XX 99-99-9999 X...X XXXX XX-9999-XX 99-99-9999 X...X XXXX XX-9999-XX 99-99-9999 X...X Nombre de locations en cours : 99 \end{SaveVerbatim} \begin{center} \fbox{\BUseVerbatim{exo2}} \end{center} Remarque : le n° saisi doit correspondre à un n° existant dans la base (ce cas d’erreur n'est pas trait\'e dans cette question). {\bf Cas d’erreur :} \begin{itemize} \item « aucune location pour ce client » \item « plusieurs locations en cours pour ce client » (cf un prochain TP pour traiter ce problème) \end{itemize} \end{exercice} \begin{verbatim} -- TEST C001 -- VE001 VE001 30-JAN-17 clio 3 -- VE002 VE002 28-JAN-17 308 -- Nombre de locations en cours pour le client C001 est de 2 DROP TABLE tligne; CREATE TABLE tligne (ligne varchar2(200)); set echo off; set verify off; set feed off; variable vclient char(4); prompt Entrer le numero du client: accept vnoclient declare dnocat Tvehicule2017.nocat%TYPE; dnoveh Tlocation2017.noveh%TYPE; ddatedeb Tlocation2017.datedeb%TYPE; dmodele Tvehicule2017.modele%TYPE; dnombreloc number; cursor r is select nocat, Tlocation2017.noveh, datedeb, modele from Tlocation2017, Tvehicule2017 where noclient='&vnoclient' and Tlocation2017.noveh= Tvehicule2017.noveh order by nocat, noveh; begin open r; fetch r into dnocat, dnoveh, ddatedeb, dmodele; while r%found loop insert into tligne values (dnoveh||' '||dnoveh||' '||ddatedeb||' '||dmodele); fetch r into dnocat, dnoveh, ddatedeb, dmodele; end loop; close r; select count(noclient) into dnombreloc from Tlocation2017 where noclient='&vnoclient'; insert into tligne values ('Nombre de locations en cours pour le client '||'&noclient'| |' est de '||dnombreloc); exception when no_data_found then insert into tligne values ('Pas de vehicule libre'); end; . / select * from tligne; set echo on; set verify on; set feed on; \end{verbatim} \begin{exercice}Afficher le nombre de véhicules par catégorie. \begin{SaveVerbatim}{exo3} Nombre de véhicules par catégorie Catégorie nb de véhicules XXXX 99 XXXX 99 \end{SaveVerbatim} \begin{center} \fbox{\BUseVerbatim{exo3}} \end{center} \end{exercice} \begin{verbatim} DROP TABLE tligne; CREATE TABLE tligne (ligne varchar2(300)); set echo off; set verify off; set feed off; declare dnocat Tvehicule2017.nocat%TYPE; dnbveh number; cursor r is select nocat, count(nocat) from Tvehicule2017 group by nocat order by nocat; begin open r; fetch r into dnocat, dnbveh; while r%found loop insert into tligne values (dnocat ||' '||dnbveh); fetch r into dnocat, dnbveh; end loop; close r; end; . / select * from tligne; set echo on; set verify on; set feed on; \end{verbatim} \end{document}