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