\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}
