Académique Documents
Professionnel Documents
Culture Documents
- Vues 2021/2022)
- Séquencés
- synonymes
- transaction ( verou, savepoint, commit, rollback)
Introduction
Durant ce TP, vous allez appréhender le rôle des objets oracle à savoir les vues, les
séquences et les synonymes, vous allez aussi toucher de prés la gestion des transactions et
de verrou et le rôle de la commande savepoint .
Important : Dans tout le TP vous utiliser le schéma HR , si vous avez oublier le mot
de passe, procéder comme suit pour l’initialiser :
Commande cmd
C:\Users\hp>sqlplus / as sysdba
SQL> alter user hr identified by hr123 account unlock;
I- Vues
1. Le service de la paie a besoin d'accéder régulièrement à des informations concernant le
salaire des employés. Le DBA de la société vous a ordonné de créer une vue nommé
vwSalary et basée sur la table ‘EMPLOYEES’. La vue devrait inclure numéro de
l'employé( Employee_id) , son nom et son prénoms et son salaire . Nommez les colonnes
de la vue comme suit: EmpID, EmpLastName, EmpFirstName, et salaireemp. Ecrire le
code SQL nécessaire pour créer cette vue. Ecrire une instruction SELECT pour afficher
les lignes de la vue pour les employés avec des salaires égaux ou supérieurs à $ 3000.
2. Remplacez la vue nommée vwSalary créé en 1 avec une nouvelle vue (même nom), qui
comprend également la colonne ‘Department_id’. Nommez cette colonne ‘departement’
dans la nouvelle vue. Ecrire une instruction SELECT pour afficher les lignes de la vue
contenant les employés de département 80 ayant salaire >= à 1000 $.
3. Créer une vue nommé VU_IT_PG qui contient les enregistrements de la table
EMPLOYEES dont le job_id est IT_PROG
a. Afficher le salaire des IT_PROG
b. Essayer de lancer la requête suivante
Update VU_IT_PG set salary=6000.50 ; commit ;
c. Quel est le salaire actuel des IT_PROG ?
3. Vue avec l’option : WITH CHECK OPTION
Problème
3.1 On crée tout d’abord la vue ci-dessous l’ordre SQL correspondant
Create view Nom_Emp as select * from EMPLOYEES where firts_name
like ‘J%’
Résultat : La vue est sensé traiter juste les employés dont le prénom commence par ‘J’,
alors qu’elle a pu insérer un employé de prénom ‘'MOHAMED', et pourtant l’insertion a
réussi
Attention on se retrouve dan la table employées avec des données non souhaitées
3.3 Que ce que va se passer en cas d’utilisation des ordres Update et delete sur la vue et la
table d’origine. Essayer l’order update et delete via la vue et verifier
- que remarquer vous ?
- faites aprés rollback pour annuler.
Solution
La solution pour ce genre de problème est La clause WITH CHECK OPTION. Elle permet
d'éviter ce type d’insertion. En effet, la clause « with check option » doit être déclaré dans
l’ordre SQL de création de vu comme suit :
- Create view Nom_Emp as select * from EMPLOYEES where first_name like ‘ J%’
with check option
3.6 insérer un enregistrement dans la table emplyees via la vue crée (Nom_Emp) dans 4.5
'AD_PRES’,'24000',NULL,NULL,'90');
-sqlplus / as sysdba
- grant select on hr.EMPLOYEES to DIP ;
- grant select on hr.JOBS to DIP ;
- grant select on hr.DEPARTEMENTS to DIP ;
Faites des select et des d’autre ordre SQL en utilisant ces synonymes public, essayer de se
connecter par plusieurs utilisateurs (l’utilisateur DIP, ou autre utilisateur)
III- Séquences
Dans cette partie
- vous vous connecter en tant que ORA_ESTM votre schéma créer dans la 1er séance
de TP, s’il n’existe plus créer le de nouveau
- Créer les deux tables suivantes :
DEPARTEMENT ( id_dep,nom_dept,id_manager, date_affc_manager)
Avec (id_dep : clé primaire)
PROJET(Num_projet,nom_projet, localisation, id_dep_proj*)
Avec ( Num_projet clé primaire et id_dep_proj clé étrangère référence
DEPARTEMENT (id_dep ) )
b- Ecrire une instruction SELECT pour afficher toutes les lignes de la table de
département trié par id_dep pour les numéros de département supérieures ou
égales à 10.
3.
a- Écrire une commande pour insérer un nouveau projet dans la table du PROJET.
Ce projet sera contrôlé par le département de ‘Gerontology’. Vous pouvez utiliser
la séquence ‘DepartmentSequence’ créé et utiliseé dans la question 1 et 2
(puisque c’est le dernier département inséré dans la table DEPARTEMENT) pour
insérer la nouvelle ligne dans la table PROJET. Les autres informations à insérer
sont représentées ci-dessous.
b- Écrire une instruction SELECT pour afficher la ligne de projet 55. Comparer aux
numéros de départements énumérés à la question 12. S’assurer que la valeur de
id_dep_proj stockée soit correct par rapport au department correspondant (ie
‘Gerontology’) .
Num_projet = 55
nom_projet = 'New Inventory Sys'
localisation = 'Alton'
id_dep_proj = (généré par le sequence)
IV- Transaction
Une transaction (ensemble d’ordres SQL) est atomique c’st-`a-dire qu’elle ne peut se terminer
que par un sucées (elle est alors validée) ou par un échec (tous ses effets sont alors détruits).
Oracle gère automatiquement les accès concurrents. Si une transaction est en train de modifier
les lignes d’une table, les autres transactions peuvent modifier les données telles qu’elles
étaient avant ces dernières modifications (pas de temps d’attente pour la lecture).
Pour rester “simple” nous dirons que toute transaction pose des verrous sur les objets qu’elle
manipule et que deux grands types de verrous existent :
– en écriture (verrou bloquant la première écriture bloque les autres jusqu’`a ce que le verrou
soit relâché)
Commandes qui provoquent un blocage implicite sur les tables et les lignes impliquées sont :
1- Faites des sélections sur les mêmes lignes des mêmes tables avec deux session en se
connectant au schéma rh (deux fenêtre cmd S1 et S2 comme illustrer dans le
tableau ci-dessous)
Session S1 Session S2
a- Par exemple, sur S1 et S2 réalisez la même requête qui est :