|
|
\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 2020-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}
|
|
|
TP1 : Location de v\'ehicules
|
|
|
\end{center}
|
|
|
|
|
|
Contexte : L'objectif est de gérer les locations d’une agence de
|
|
|
locations de véhicules. Les tables utilisées sont les suivantes :
|
|
|
\begin{description}
|
|
|
\item[Tclient2021]:
|
|
|
\begin{itemize}
|
|
|
\item Numéro client
|
|
|
\item Nom
|
|
|
\item Ville
|
|
|
\item Code postal
|
|
|
\end{itemize}
|
|
|
\item[Tcategorie2021]:
|
|
|
\begin{itemize}
|
|
|
\item Numéro categorie
|
|
|
\item Libellé
|
|
|
\end{itemize}
|
|
|
\item[Tremplacement2021]:
|
|
|
\begin{itemize}
|
|
|
\item Numéro catégorie
|
|
|
\item Numéro catégorie équivalente
|
|
|
\end{itemize}
|
|
|
\item[Tvehicule2021]:
|
|
|
\begin{itemize}
|
|
|
\item Numéro véhicule
|
|
|
\item Immatriculation
|
|
|
\item Modèle
|
|
|
\item Couleur
|
|
|
\item Dernier kilométrage
|
|
|
\end{itemize}
|
|
|
\item[Tlocation2021]:
|
|
|
\begin{itemize}
|
|
|
\item Numéro client
|
|
|
\item Numéro véhicule
|
|
|
\item Date début location
|
|
|
\item Date retour prévue
|
|
|
\item Kilométrage départ
|
|
|
\end{itemize}
|
|
|
\item[Tlocatretour2021]:
|
|
|
\begin{itemize}
|
|
|
\item Numéro client
|
|
|
\item Numéro véhicule
|
|
|
\item Date début location
|
|
|
\item Date retour prévue
|
|
|
\item Kilométrage départ
|
|
|
\item Date retour effectif
|
|
|
\item Kilométrage fin
|
|
|
\end{itemize}
|
|
|
\end{description}
|
|
|
|
|
|
Vous trouverez sur le site suivant
|
|
|
\url{https://sancy.iut-clermont.uca.fr/~lafourcade/BDP3/} et sur l’ENT
|
|
|
le script de création et de remplissage des tables (des occurrences
|
|
|
pourront être ajoutées si nécessaire) \code{locationvehic2021.sql} Vos
|
|
|
procédures SQL devront avoir la structure suivante :
|
|
|
|
|
|
\begin{SaveVerbatim}{VerbEnv}
|
|
|
|
|
|
drop table tligne ;
|
|
|
create table Tligne (ligne varchar2(200)) ;
|
|
|
|
|
|
Déclaration des variables hôtes
|
|
|
Saisie des paramètres
|
|
|
|
|
|
Bloc PL/SQL
|
|
|
|
|
|
Select * from Tligne ;
|
|
|
\end{SaveVerbatim}
|
|
|
|
|
|
{\centering \fbox{\BUseVerbatim{VerbEnv}}\par}
|
|
|
|
|
|
|
|
|
|
|
|
\begin{exercice}[Sans utiliser la clause exception]
|
|
|
|
|
|
A partir d’un numéro de véhicule saisi au clavier, afficher l’immatriculation et le modèle correspondant ainsi que le nom du client si c’est un véhicule en cours de location.
|
|
|
|
|
|
{\bf Cas d’erreur :} « n° de véhicule inconnu ».
|
|
|
\end{exercice}
|
|
|
|
|
|
\begin{exercice}[Avec la clause exception]
|
|
|
Afficher le numéro du véhicule loué par un client dont le numéro sera saisi.
|
|
|
|
|
|
{\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{exercice}[Mise à jour : enregistrement d’un retour de location]
|
|
|
|
|
|
Il est demander d'enregistrer le retour d’un véhicule. Donner la
|
|
|
procédure PL/SQL permettant l’enregistrement du retour, pour une date
|
|
|
de retour donnée et pour un véhicule dont le numéro sera saisi ainsi
|
|
|
que le kilométrage de fin de location. Informations à saisir par
|
|
|
l'utilisateur sont : numéro du véhicule, date de retour, kilométrage
|
|
|
de fin.
|
|
|
|
|
|
Les messages suivants sont à prévoir :
|
|
|
\begin{itemize}
|
|
|
\item numéro véhicule inconnu,
|
|
|
\item ce véhicule n’est pas en cours de location,
|
|
|
\item la date de retour doit être postérieure à la date de début de
|
|
|
location,
|
|
|
\item le kilométrage de fin doit être supérieur au kilométrage de
|
|
|
début,
|
|
|
\item le retour a bien été enregistré et le kilométrage du véhicule a été
|
|
|
mis à jour.
|
|
|
\end{itemize}
|
|
|
\end{exercice}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\paragraph{Premi\`ere s\'eance :} Connexion : \verb+sqlplus <user>/<password>@KIROV+
|
|
|
|
|
|
Lors de votre première connexion modifier votre mot de passe avec la
|
|
|
commande : \verb+PASSWORD;+
|
|
|
|
|
|
Ce qui est équivalent à :
|
|
|
\verb+ALTER USER dupond IDENTIFIED BY password;+
|
|
|
|
|
|
|
|
|
Si le mot de passe est \'egar\'e quelque part, il faut se connecter en
|
|
|
\code{ssh} sur \code{londres} et faire \code{oracle\_passwd}
|
|
|
|
|
|
|
|
|
|
|
|
Pour lancer un fichier \verb+.sql+ en sqlplus, il suffit de taper :
|
|
|
\verb+@toto.sql;+
|
|
|
|
|
|
Pour quitter sqlplus, il suffit de taper : \verb+quit;+
|
|
|
|
|
|
Lancer \verb+sqlplus+ avec cette commande \verb+rlwrap sqlplus+ vous
|
|
|
permet d'avoir l'historique.
|
|
|
|
|
|
|
|
|
|
|
|
\paragraph{Corbeille :} Vider les tables \verb+BIN$$xxxx+ : avec la
|
|
|
commande \verb+PURGE RECYCLEBIN;+
|
|
|
|
|
|
\paragraph{En cas de blocage :}
|
|
|
|
|
|
Dans un terminal executer la commande suivante pour voir les \code{pid}
|
|
|
des processus zombies : \verb+ps -aux | grep sqlplus+
|
|
|
|
|
|
Ensuite tuer ces zombies gr\^ace \`a la commande \code{kill -9 numerodepid}
|
|
|
|
|
|
\end{document}
|