Correction Examen SQL Server Oracle Session Normale

Download as pdf or txt
Download as pdf or txt
You are on page 1of 5

CORRECTION EXAMEN SQL Server Oracle SESSION NORMALE

A. Première partie : EVALUATION DES CONNAISSANCES DE BASES DE


DONNEES (5 points)

1. Les bases de données par défaut de SQL server et leur description :

 Master : Contrôle les bases de données utilisateur et le fonctionnement global de SQL Server
en effectuant le suivi d’informations telles que les comptes d’utilisateur, les variables
d’environnement configurables et les messages d’erreur du système.
 Model : Offre un modèle ou prototype pour les nouvelles bases de données utilisateur.
 tempdb : Offre une zone de stockage pour les tables temporaires et les autres besoins de
stockage temporaire.
 msdb : Offre une zone de stockage pour les informations de programmation et l’historique
des travaux.
 distribution : Stocke les données relatives à l’historique et aux transactions utilisées dans la
réplication.
 pubs : Propose un exemple de base de données comme outil d’apprentissage
2. les contraintes d’intégrité de sql server :

• Primary Key
• Foreign Key
• Identity
• Not Null
3. Les structures logiques et physiques qui constituent la base de données
Oracle sont-elles mêmes constituées d'autres composants.
• La structure physique est constituée de fichiers de contrôle, de fichiers
redo log online et de fichiers de données qui sont constitués de blocs
OS.
• Les composants de la structure logique d'une base de données sont les
tablespaces, les segments, les extents et les blocs de données.

PARTIE B PRATIQUES SQL sous SQL Server

1. UPDATE EMP SET SAL=SAL*1.1 WHERE COMM>0.5*SAL;


2. SELECT ENAME, SAL, COMM, SAL+COMM FROM EMP WHERE
JOB='SALESMAN';

3. SELECT COUNT(DISTINCT JOB) FROM EMP;

4. SELECT JOB, AVG(SAL) FROM EMP GROUP BY JOB;

5. SELECT ENAME FROM EMP WHERE MGR=(SELECT MGR FROM


EMP WHERE ENAME='CLARK') AND ENAME<>'CLARK';

PARTIE C: ETUDE DE CAS

I. COMPTES BANCAIRES
1. CREATE PROCEDURE MAJSOLDEBANQUE
@idCompte : int
@sens : varchar
@montant : varchar
begin
IF (sens='c') then
UPDATE compte SET CsoldeBanque=CsoldeBanque+@montant
WHERE Cid=@idCompte
else
UPDATE compte SET CsoldeBanque=CsoldeBanque-@montant
WHERE Cid=@idCompte
End if
End;

2. CREATE PROCEDURE MAJSOLDEREEL

@idCompte int
@sens : varchar
@montant : vrachar
begin
IF (@sens='c') then
UPDATE compte SET CsoldeReel=CsoldeReel+@montant
WHERE Cid=@idCompte
else
UPDATE compte SET CsoldeReel=CsoldeReel-@montant
WHERE Cid=@idCompte
endif
end;

3. CREATE TRIGGER trigInsOperation ON INSERT FOR OPERATION


VARIABLES
@sens : varchar
begin
majSoldeReel(new.Ocompte, new.Osens, new.Omontant)
IF (new.Oreleve IS NOT NULL) then
majSoldeBanque(new.Ocompte, new.Osens, new.Omontant)
endif
end;

4.CREATE TRIGGER trigUpdateOperation ON UPDATE FOR OPERATION


VARIABLES
@sens : caractère
begin
// Annulation du montant originel de l"'"opération en affectant
// ce même montant en sens inverse
IF (old.Osens='c') then @sens='d' else @sens='c' endif
majSoldeReel(old.Ocompte, @sens, old.Omontant)
IF (old.Oreleve IS NOT NULL) then
majSoldeBanque(old.Ocompte, @sens, old.Omontant)
endif
// MAJ du compte par le nouveau montant
majSoldeReel(new.Ocompte, new.Osens, new.Omontant)
IF (new.Oreleve IS NOT NULL) then
majSoldeBanque(new.Ocompte, new.Osens, new.Omontant)
endif
end

5.CREATE TRIGGER trigDelOperation ON DELETE FOR OPERATION


VARIABLES
@sens : varchar
begin

IF (old.Osens='c') then @sens='d' else @sens='c' endif


majSoldeReel(old.Ocompte, @sens, old.Omontant)
IF (old.Oreleve IS NOT NULL) then
majSoldeBanque(old.Ocompte, @sens, old.Omontant)
endif
end;

II. ETUDE DE CAS II

1)
use master
go
create database M21N3Ex1--AcciRoute
go

-- 2)
use M21N3Ex1
go
alter Proc AcciRoute
as
begin
if exists(select * from sys.tables where name like 'Personne')
drop table Personne
create table Personne (NAS char(9)primary key, nom varchar(35), VilleP Varchar(50))

if exists(select * from sys.tables where name like 'Voiture')


drop table Voiture
create table Voiture (Imma Char(6)primary key, modele varchar(20), annee smalldatetime, nas
char(9))
if exists(select * from sys.tables where name like 'Accident')
drop table Accident
create table Accident (DateAc smallDatetime, NAS char(9)foreign key references
Personne(Nas),
dommage numeric(7,2), villeAc varchar(50),imma char(6)foreign key references
Voiture(imma))
end
Go
Exec AcciRoute
go

-- 3)
create proc inserte(@dateAc datetime,@NAS char,@dommage numeric,@villeAc
varchar,@imma char)
as
begin
BEGIN try
if not exists(select * from Personne where @NAS=NAS)
RAISERROR('NAS introuvable ',15,1)
else if not exists(select * from Voiture where @Imma=Imma)
RAISERROR('IMMA introuvale ',15,1)
else --if not exists(select * from Accident)
insert into Accident values(@dateAc,@NAS,@dommage,@villeAc,@imma)
end try
begin catch
select ERROR_MESSAGE() AS ErrorMessage
end catch
end

Exec inserte '12/06/1993 05:30','xxx',30,'rabat','yyy'


Exec inserte 'xxx','fandi','casa'
Exec inserte 'yyy','uno','12/05/1990','qqq'
Exec inserte '12/06/1993','xxx',30,'rabat','yyy'
go
--- 4)
alter proc GetnumProp(@A1 int,@A2 int)
as
begin
select COUNT(distinct NAS) from Accident where YEAR(DateAc) between @A1 and @A2
end
Go
exec GetnumProp 1990,1998
go
--- 5)
create proc GetProp
as
begin
select P.nom,P.NAS from Personne P,Accident A1,Accident A2
where A1.NAS=A2.NAS and A1.NAS=P.NAS and A1.NAS>=A2.NAS and
ABS(DATEDIFF(month ,A1.DateAc,A2.DateAc))>4

end;

You might also like