corrigéContrôle2

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 5

Questions de Cours

1. Après avoir décrit la table EMPLOYEES, vous découvrez que la colonne SALAIRE a
le type de données NUMBER(8,2). Quels sont les valeurs de SALAIRE qui ne seront
pas autorisés dans cette colonne ? (Cochez toutes les réponses applicables) :
 SALARY=12345678
 SALARY=123456.78
 SALARY=12345.678
 SALARY=123456
 SALARY=12.34

2. Quelles sont les différences entre SQL, PL-SQL et SQL-Plus.


SQL : Langage d’interrogation de données

PL-SQL : ajouter la couche procédurale à SQL

SQL-PLUS : console d’Oracle pour exécuter des requêtes SQl et des programmes PL-
SQL

3. Donnez trois opérateurs utilisés lorsqu’une sous requête ramènes plusieurs lignes.
IN, ALL, ANY, EXISTS

4. Peut-on modifier les données d’une table à travers une vue de la table contenant une
fonction de groupe ?
NON, on ne peut pas.

5. Comment peut-on terminer une transaction ? (Donnez toutes les manières possibles)
Commit, rollback, abort, exit, fermeture de session.

6. Cochez les réponses correctes concernant les fonctions de groupe :


 Elles peuvent être utilisées sans que la clause GROUP BY soit présente.
 Elles peuvent agir sur plusieurs lignes à la fois.
 Elles agissent sur une seule ligne à la fois.
 Elles peuvent agir sur plusieurs colonnes à la fois

7. Qu’est-ce qu’une séquence ? Créer une séquence de votre choix.

C’est un objet utilisateur qui permet de générer des valeurs uniques.

8. Quelle est la différence entre les opérateurs UNION et UNION ALL.


Union ramène une seul copies des valeurs similaires entre deux table. UNON ALL
ramène même les valeurs redondantes

9. Qu’est-ce qu’une VIEW ? Existe-elle physiquement ?

Table virtuelle calculée à partir d’autres tables ou vues par une requête

Pas d’existence physique mais recalculée chaque fois qu’elle est invoquée.

10. Quels sont les modes des transactions ? Quelles requêtes peut-on exécuter dans chaque
mode ?

Le mode Read : on ne peut que sélectionner pour consulter les données.

Read/Write : select + instructions LMD.

Exercice

Considérant les tables de la base de données suivantes :

Client (Numcli, Nom, Adresse, Localité, Catégorie, Compte)

Commande (Numcom, Numcli*, DateCom)

Produit (Numprod, Libelle, prix, Qtstocké)

Detail (Numcom*, Npro*, Qtecom)

Remarque : les clés primaires sont soulignées et les clés étrangères sont marquées par *

Donnez les requêtes qui permettent de :

1- Créer les deux tables Commande et Detail

 Create table detail (Numcom number foreign key references


Commande(Numcom),
Npro number foreign key references Produit(Numprod),
QteCom number,
Constraint pk_NcNpro primary key(Numcom*, Npro));

 Create table Commande(Numcom number primary key,


Numcli number foreign key references Client(Numcli),
DateCom Date);
2- Ajouter la contrainte DateCom inférieure à la date d’aujourd’jui à la table Commande

Alter table commande add constraint ck_date check(datecom < sysdate);


3- Supprimer la colonne Adresse de la table client et quitter sans valider.
Alter table Client drop column Adresse ;
Rollback ;
Exit ;

4- Créer les deux tables Commande et Detail avec leurs contraintes d’intégrité
référentielles.
 Create table detail (Numcom number foreign key references
Commande(Numcom),
Npro number foreign key references Produit(Numprod),
QteCom number,
Constraint pk_NcNpro primary key(Numcom*, Npro));

 Create table Commande(Numcom number primary key,


Numcli number foreign key references Client(Numcli),
DateCom Date);

5- Supprimer la colonne Adresse de la table client.


 Alter table client drop column adresse;

6- Créer une vue pour les commandes (Numero de la commande et du produit) fait depuis
le début de ce mois.

Create view commande_de_ce_mois as

Select C.Numcom, P.NumProd from Commande C, Produit P, Detail D where


P.Numprod = D.Npro and D.numcom = C.numcom and C.dateCom > '01-11-
2016';

En supposant que les autres tables sont créées, Donnez les requêtes qui permettent de savoir :

7- Les clients qui soit sont de catégorie B1 ou C1, soit habitent à Fès ou à Oujda (ou les
deux conditions).

select NCLI, LOCALITE, CAT from CLIENT where CAT in ('B1','C1') or


LOCALITE in ('Fès','Oujda');
5- Dans combien de localités trouve-t-on des clients de catégorie C1 ?

select count(distinct LOCALITE)


from CLIENT
where CAT = 'C1' ;
8- Calculer le montant commandé des produits dont le numéro est impair.

Select sum(P.prix * D.Qtecom) from Produit P, Detail D, where P.numprod


= D.Npro and and (D.numCom / 2) != 0);
9- Les clients de catégorie C1 n’habitant pas à Rabat.

Select * from client where Catégorie = 'C1' and Localité != 'Rabat’;


10- Les clients qui soit sont de catégorie B1 ou C1, soit habitent à Safi ou à Dakhla (mais
pas les deux conditions).

select NCLI, LOCALITE, CAT


from CLIENT
where (CAT in ('B1','C1') and LOCALITE not in ('Safi','Dakhla'))
or (CAT not in ('B1','C1') and LOCALITE in ('Safi','Dakhla'))

11- Afficher le total et la moyenne des comptes des clients, ainsi que le nombre de clients,
classé par catégorie dans chaque localité.

select CAT, sum(COMPTE), avg(COMPTE), count(*)


from CLIENT group by LOCALITE, CAT;

12- Écrire un programme PL-SQL permettant de :


Réduire de 15% le prix des produits dont le numéro est saisi au clavier
D’afficher les informations de ces produits avant et après la modification.

Declare

Num_prod Produit.Numprod%type = &NumClavier ;

prixProdAvant Produit.prix%type ;

prixProdApres Produit.prix%type ;

Begin

Select prix into prixProdAvant from produit where NumProd = Num_prod;

Update produit set prix = prix * 0.85 where Numpro = Num_prod ;

Select prix into prixProdApres from produit where NumProd = Num_prod;


Dbms_output.put_line('Prix originale : ' || prixProdAvant || ', Prix
réduit : ' || prixProdApres) ;

End ;

13- Écrire un programme PL-SQL permettant de vérifier si un client, dont le numéro est
saisi au clavier, a fait au moins une commande et de le supprimer s’il n’a fait aucune.

Declare
NO_CLI Client.Numcli%type := &no_cl;
Nbr_com number := 0
Begin
Select count(*) into nbr_com FROM Commande where Numcli = NO_CLI ;
If(nbr_com < 1) then
Delete Client where Numcli = NO_CLI;
End id;
End ;

Vous aimerez peut-être aussi