You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

360 lines
7.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

\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}
TP3
\end{center}
\begin{exercice}[Suppression dun client]
Information à saisir : n° client
Pr\'evoir les messages suivants :
\begin{itemize}
\item client inconnu
\item des locations sont en cours : suppression impossible suivi de la liste des locations en cours
\item n 'locations retournées ont été supprimées
\item le client a bien été supprimé
\end{itemize}
\end{exercice}
\begin{verbatim}
-- ORA-01422 : selct renvoit trop de choses
-- Test
-- C004
-- client inconnu
-- C001
-- 2 locations sont en cours : suppression impossible
-- VE001
-- VE002
-- C003
-- BUG
start locationvehic2017;
DROP TABLE tligne;
CREATE TABLE tligne (ligne varchar2(300));
set echo off; set verify off; set feed off;
variable vnoclient char(4);
prompt Entrer le numero du client :
accept vnoclient
declare
dmessage varchar2(200);
dnoveh Tlocation2017.noveh%TYPE;
dnoclientloc Tclient2017.noclient%TYPE;
dnbnoclient number;
dnblocation number;
dnblocationout number;
CURSOR r IS
select noveh
from Tlocation2017
where noclient='&vnoclient';
CURSOR loc IS
select noclient
from Tlocatretour2017
where noclient='&vnoclient'
FOR UPDATE;
begin
dmessage:='client inconnu';
select count(noclient) into dnbnoclient
from Tclient2017
where noclient='&vnoclient';
if dnbnoclient = 0 then insert into tligne values (dmessage);
else
select count(noclient) into dnblocation from Tlocation2017 where noclient='&vnoclient';
if dnblocation > 0 then
dmessage:=dnblocation||' locations sont en cours : suppression impossible';
insert into tligne values (dmessage);
open r;
fetch r into dnoveh;
while r%found
loop
insert into tligne values(dnoveh);
COMMIT;
fetch r into dnoveh;
end loop;
close r;
else
select count(noclient) into dnblocationout from Tlocatretour2017 where noclient='&vnoclient';
dmessage:=dnblocationout||' location retourns vont etre supprimees';
insert into tligne values (dmessage);
if dnblocationout=1 then
open loc;
fetch loc into dnoclientloc;
DELETE FROM Tlocatretour2017 WHERE CURRENT OF loc;
COMMIT;
close loc;
end if;
DELETE FROM Tclient2017 WHERE noclient='&vnoclient';
dmessage:='le client a bien ete supprime';
insert into tligne values (dmessage);
end if;
end if;
end;
.
/
select * from tligne;
set echo on; set verify on; set feed on;
\end{verbatim}
\begin{exercice}
Afficher la liste des véhicules libres de même catégorie ou de
catégorie équivalente que le véhicule n° XXXXX (n° saisi).
\begin{SaveVerbatim}{exo2}
Numéro véhicule : numéro catégorie
Catégorie libellé cat. num vehic. kms
XXXX X...X XX-9999-XX 9999
XXXX X...X XX-9999-XX 9999
XXXX X...X XX-9999-XX 9999
XXXX X...X XX-9999-XX 9999
\end{SaveVerbatim}
\begin{center}
\fbox{\BUseVerbatim{exo2}}
\end{center}
{\bf Cas derreur :}
\begin{itemize}
\item N° véhicule inconnu
\item Aucun véhicule libre de catégorie équivalente
\end{itemize}
\end{exercice}
\begin{verbatim}
start locationvehic2017;
commit;
set echo off; set verify off; set feed off;
variable vnoclient char(4);
prompt Entrer le numero du client :
accept vnoclient
declare
dno varchar(4);
dkmdeb number;
CURSOR loc IS
select noclient
from Tlocatretour2017
where noclient='&vnoclient'
FOR UPDATE of kmdeb;
begin
open loc;
fetch loc into dno;
while loc%found
loop
UPDATE Tlocatretour2017 SET kmdeb=7 WHERE CURRENT OF loc ;
fetch loc into dno;
end loop;
COMMIT;
close loc;
end;
.
/
select * from TLocatretour2017;
set echo on; set verify on; set feed on;
\end{verbatim}
\begin{exercice}Afficher la liste des locations retournées du mois :
\begin{SaveVerbatim}{exo3}
Locations retournées du mois
Catégorie : cat libellé
N° véhicule : XXXXX
N° client Date début Nb de jours Nb de kms
... ... ... ...
... ... ... ...
Total véhicule : xx jours
99999 kms
N° véhicule : XXXXX
N° client Date début Nb de jours Nb de kms
... ... ... ...
... ... ... ...
Total véhicule : xx jours
99999 kms
Catégorie : cat libellé
N° véhicule : XXXXX
N° client Date début Nb de jours Nb de kms
... ... ... ...
... ... ... ...
Total véhicule : xx jours
99999 kms
N° véhicule : XXXXX
N° client Date début Nb de jours Nb de kms
... ... ... ...
... ... ... ...
Total véhicule : xx jours
99999 kms
\end{SaveVerbatim}
\begin{center}
\begin{small}
\fbox{\BUseVerbatim{exo3}}
\end{small}
\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
dmessage varchar2(300);
dnoclient varchar(4);
dnoveh char(5);
dkm number;
ddatedeb date;
dmois date;
dnbjours number;
dnbkms number;
dtotalkms number;
dtotaljours number:=0;
dcurrentnoveh char(5);
-- between ROUND(to_date(sysdate),'MONTH') and TRUNC(to_date(sysdate,'DD-MON-YY'),'MONTH')
CURSOR r IS
select noveh, noclient, datedeb, (dateretour - datedeb), (kmfin-kmdeb) into dnoveh, dnoclient, ddatedeb, dnbjours, dnbkms
from Tlocatretour2017
order by noveh;
begin
dmessage:='Aucune voiture louee';
open r;
fetch r into dnoveh, dnoclient, ddatedeb, dnbjours, dnbkms;
dcurrentnoveh:=' ';
dtotalkms:=dnbkms;
dtotaljours:=dnbjours;
while r%found
loop
if (dcurrentnoveh = dnoveh) then
insert into tligne values (dnoclient||' '||ddatedeb||' '||dnbjours||' '||dnbkms);
dtotalkms:=dtotalkms+dnbkms;
dtotaljours:=dtotaljours+dnbjours;
else
if dcurrentnoveh<>' ' then
insert into tligne values ('total jour: '||dtotaljours);
insert into tligne values ('total km: '||dtotalkms);
end if;
insert into tligne values (dnoveh);
insert into tligne values (dnoclient||' '||ddatedeb||' '||dnbjours||' '||dnbkms);
dtotalkms:=dnbkms;
dtotaljours:=dnbjours;
end if;
dcurrentnoveh:=dnoveh;
fetch r into dnoveh, dnoclient, ddatedeb, dnbjours, dnbkms;
end loop;
insert into tligne values ('total jour: '||dtotaljours);
insert into tligne values ('total km: '||dtotalkms);
close r;
exception
when no_data_found then insert into tligne values (dmessage);
end;
.
/
select * from tligne;
set echo on; set verify on; set feed on;
\end{verbatim}
\end{document}