Tp1 BDDAV 2025 2
Tp1 BDDAV 2025 2
Tp1 BDDAV 2025 2
2. SQL*PLUS
i. Ouvrir un terminal et exécuter la commande suivante :
➢ docker exec –it oracledb /bin/sh
➢ -> sqlplus
ii. Connecter en tant qu’administrateur, en tapant la commande sys as sysdba;
iii. Créer un nouvel utilisateur en tapant : create user ali identified by aaa ;
iv. Affectation des droits : grant all privileges to ali ;
➢ PS : si vous n’arrivez pas à récupérer votre user, exécutez la commande suivante :
alter system set "_common_user_prefix"='' scope=spfile;
v. Connecter avec l’utilisateur ali : connect ali, ensuite vous tapez son mot de passe « aaa »
vi. Taper show user ; pour savoir avec quel utilisateur vous êtes connectés
vii. Créer une table « etudiant(id,nom) » et essayer d’insérer certains tuples
viii. Ajouter commit ; pour valider vos insertions (sinon rollback pour annuler)
ix. Créer un autre utilisateur nommé « ahmed », et vérifier si vous pouvez créer la même table « etudiant »
en connectant avec l’user « ahmed »
x. A partir de l’utilisateur « ahmed » afficher le contenu de la table « etudiant » de l’utilisateur « ali » (ou
du schéma de ali) : select * from ali.etudiant ;
3. Auto-Increment dans oracle :Dans oracle, les attributs auto-increment sont gérés par des
séquences.
i. Soit la table client : CREATE TABLE client ( id int PRIMARY KEY, nom varchar(45))
ii. Pour rendre la colonne id auto-increment, il faut créer une séquence :
create sequence client_seq
INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE CACHE 10;
iii. Ensuite, pour chaque nouvelle insertion l’id du nouveau client est calculé en utilisant l’instruction :
client_seq.nextval
insert into client values(client_seq.nextval, ’Ahmed’); Id nom
insert into client values(client_seq.nextval, ’Ali’); commit; 1 ahmed
2 ali
Dr. MALKI Abdelhamid 2ème Année SC- BDD Av
[email protected]
4. PL/SQL: (sur SQL Developer https://www.oracle.com/tools/downloads/sqldev-downloads.html, )
Soit le schéma relationnel de la base de données PRODUIT (exécuter le fichier creation_script_ex1.sql )
PRODUIT (IDP, designation, prixUnitaire, #IDCategorie) ;
CATEGORIE (IDCategorie, nom)
Partie 1 : Le prix unitaire dans la table produit est exprimé en Dinars. On souhaite vendre ces produits
à l’étranger, par conséquent, nous devons construire, à partir de la table PRODUIT, une autre table
PRODUIT_Etranger telle que :
o Les deux tables ont la même structure ;
o La désignation des produits soit écrite en majuscules ;
o Le prix unitaire en Dinars des produits soit converti en Dollars.
o Si la table PRODUIT est vide, la table PRODUIT_Etranger devra contenir uniquement le tuple
(0,’Pas de produit’, NULL, NULL).
o Si un prix de la table produit est NULL, son prix en Dollars doit être 0.
1. Ecrivez le code PL/SQL qui permet de remplir la table PRODUIT_Etranger
Partie 2 :
Soit la table ProduitHistory (user, idP, operation_date, operation_type).
• Ecrire un trigger permettant, après l’exécution de chaque opération sur la table Produit, d’ajouter
un tuple concernant cette opération dans la table ProduitHistory tout en précisant l’utilisateur est
la date de l’opération.
5. PL/SQL avancé
Soit le schéma relationnel d’un championnat de cyclisme (exécuter le fichier creation_script_ex2.sql ):
Equipe (IdEquipe, nom, nbCycliste) Cycliste (IdCycliste, nom, #IdEquipe)
Etape (IdEtape, départ, arrivée, distance) Resultat (#IdCycliste, #IdEtape, temps)
Remarque : le champ temps est exprimé en second
1. Soit la table ResultatFinal (IdCycliste, totalTemps) qui enregistre pour les cyclistes ayant participé à
toutes les étapes, leur temps total réalisé lors de celles-ci. Ecrivez le code PL/SQL qui permet de remplir
la table ResultatFinal.
2. Supposons que le nombre de cyclistes par équipe (nbCycliste) doit être entre 4 et 6.
Créez un déclencheur qui contrôle et met à jour la colonne nbCycliste avant chaque manipulation dans
la table Cycliste.