I-Vues: SQL Avancé
I-Vues: SQL Avancé
I-Vues: SQL Avancé
- Vues 2023/2024)
- 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%’
3.2 Puis on essaye d’insérer un enregistrement dans la table EMPLOYEES via la vue,
ci-dessous l’ordre SQL correspondant
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.
- 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');
c. Créer une vue en lecture seule nommée lecseul_job_emp contenant le nom, premon
des employés qui ont occupé 2 fonctions ou plus ( 2 Jobs), les tables de base sont
JOB_HISTORY , et EMPLOYEES. Faites des select sur cette vue.
II- Synonymes
1- Se connecter en tant que sysdba, et créer des synonymes public aux tables de shéma HR
comme suit : PEMP pour la table EMPLOYEES, PJO pour la table JOBS , et PDEP
pour la table DEPARTEMENTS.
2- Les synonymes publique ne vont pas marcher si les autres utilisateurs n’ont pas le droit
sur les table pour cela faites :
-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 1 er 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 ) )
1. Le Manager des ressources désire numéroter le nouveau département de l’entreprise de
façon séquentielle en commençant par le numéro 40. La numérotation des départemenst
sera incrémentée de 1. Écrire le code nécessaire pour créer cette sequence, la séquence
portera le nom ‘DepartmentSequence’
2.
a- Ecrire l’order SQL pour insérer deux nouvelles lignes dans la table DEPARTEMENT
en utilisant la sequence ‘DepartmentSequence’ créee dans question 1. Les autres
informations à insérer sont indiquées ci-dessous:
nom_dept = 'Medical Surgical Ward 2’
nom_dept = ‘Gerontology’
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
localisation = 'Alton'
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