Académique Documents
Professionnel Documents
Culture Documents
Chap II:
ASCII(chaîne)
Renvoie le nombre correspondant au code ascii du premier caractère de chaîne.
CHR(nombre)
Renvoie le caractère dont nombre est le code ascii.
TO_CHAR(nombre, format)
Renvoie la chaîne de caractères en obtenue en convertissant nombre en fonction de format.
TO_CHAR(date, format)
Renvoie conversion d'une date en chaîne de caractères.
TO_DATE(chaîne, format)
Permet de convertir une chaîne de caractères en donnée de type date. Le format est identique à
celui de la fonction TO_CHAR.
TO_NUMBER(chaîne)
Convertit chaîne en sa valeur numérique.
Autres fonctions
Contrairement à une table, une vue stocke aucune donnée, seulement une
instruction SQL
Une fois créée, une vue s'utilise comme une table. Il n'y a pas de duplication
des informations mais stockage de la définition de la vue.
Les vue permettent de protéger l’accès aux tables en fonction de chacun des
utilisateurs.
13/03/2023 Prof Y.FARHAOUI 7
Niveaux logiques pour les applications
d'entreprise distribuées
Exemple:
Création
d’une vue ligne
Le CHECK OPTION permet de vérifier que la mise à jour ou l'insertion faite à travers la
vue ne produisent que des lignes qui font partie de la sélection de la vue.
Ainsi donc, si la vue vols_d_Casa a été créée avec CHECK OPTION on ne pourra à
travers cette vue ni modifier, ni insérer des vols avec V_d ≠ ’Casa’;.
13/03/2023 Prof Y.FARHAOUI 11
Les vues : création
Il est possible d'effectuer des INSERT et des UPDATE à travers des vues, sous deux
conditions :
le SELECT définissant la vue ne doit pas comporter de jointure,
les colonnes résultat du SELECT doivent être des colonnes réelles et non pas des
expressions.
Pour connaître les pilotes qui assurent le plus grand nombre de vols
CREATE VIEW nbre_de_vols_par_pil
AS SELECT no_PIL, count(*) AS NBR_VOLS
FROM vols V
WHERE no_PIL IS NOT NULL
GROUP BY no_PIL ;
Exemple : empêcher l’affectation d’un même avion à deux vols différents dont les
tranches horaires se chevauchent
Un tel moyen d'accès conduit à des temps de réponse pour des tables dépassant quelques
centaines de lignes.
Une solution offerte par tous les systèmes de gestion de bases de données est la création
d'index, qui permettra de satisfaire aux requêtes les plus fréquentes avec des temps de
réponse acceptables.
Un index sera matérialisé par la création de blocs disque contenant des couples (valeurs
d'index, numéro de bloc) donnant le numéro de bloc disque dans lequel se trouvent les
lignes correspondant à chaque valeur d'index.
Un index est un objet permettant d’accélérer l’accès aux données . La création d’un index
sur une clé primaire se fait automatiquement par le système. Pour créer un index sur un
champ autre que la clé primaire on utilise la commande CREATE INDEX.
Il est également possible de créer un index sur une seule colonne en précisant la colonne sur
laquelle doit s’appliquer l’index :
CREATE INDEX `index_nom` ON `table` (`colonne1`);
L’exemple ci-dessus va donc insérer l’index intitulé « index_nom » sur la table nommée
« table » uniquement sur la colonne « colonne1 ». Pour insérer un index sur plusieurs
colonnes il est possible d’utiliser la syntaxe suivante:
CREATE INDEX `index_nom` ON `table` (`colonne1`, `colonne2`);
Dans cet exemple un index unique sera créé sur la colonne nommée colonne1. Cela signifie
qu’il ne peut pas y avoir plusieurs fois la même valeur sur 2 enregistrements distincts contenus
dans cette table.
Il est également possible de créer un index d’unicité sur 2 colonnes, en respectant la syntaxe
suivante:
Définition : Le cluster est une organisation physique des données qui consiste à regrouper
physiquement (dans un même bloc disque) les lignes d'une ou plusieurs tables ayant une
caractéristique commune (une même valeur dans une ou plusieurs colonnes) constituant la
clé du cluster.
Avant de pouvoir mettre en cluster une ou plusieurs tables il faut créer le cluster au moyen
de la commande CREATE CLUSTER dont la syntaxe est la suivante :
CREATE CLUSTER nom_cluster
(cle1 type1,
cle2 type2,
...)
où l'on donne un nom au cluster, et où l'on définit le nom et le type des colonnes
constituant la clé du cluster.
Supprimer un cluster
Un cluster ne contenant aucune table peut être supprimé par la commande :
DROP CLUSTER nom_cluster ;
Remarque : Les performances du cluster ne sont valables que si on n'a pas de blocs chaînés
(ex de grande table).
Les synonymes est une autre désignation pour les objets (vue, tables, séquence..) de la base
de données. Il est utilisé pour faciliter l’accès à un objet. Par exemple au lieu d’accéder à une
table via un chemin d’accès (schéma.nom_table) on utilise un synonyme.
Un synonyme peut être public, ou privé. Par défaut un synonyme est privé.
Syntaxe
CREATE [PUBLIC] SYNONYM <nom_du_sysnonyme> FOR <nom_objet>
● NOCYCLE(par défaut) indique que la séquence ne doit plus générer de valeurs une fois
la limite atteinte.
● CACHE spécifie le nombre de valeurs de la séquence que le cache doit contenir
(préalloca-tion de mémoire). Le minimum est 2 et le maximum théorique est donné par la
formule :
(CEIL (MAXVALUE - MINVALUE)) / ABS(INCREMENT)
● NOCACHE indique qu’aucune valeur de la séquence n’est dans le cache. Si les options
CACHEet NOCACHEsont absentes de l’instruction, vingt valeurs de la séquence seront
mises en cache.
● ORDER garantit que les valeurs de la séquence sont générées dans l’ordre des requêtes.
Il faut utiliser cette option si la séquence est employée comme un point dans le temps
(times-tamp) dans des applications concurrentes (Real Application Clusters) ou dans celles
qui fonctionnent en mode de verrous exclusifs. Cette option n’est pas importante pour les
séquences clés primaires.
● NOORDER(défaut) ne prend pas en compte l’option précédente.
Créons les deux séquences (seqAff et seqPax) qui vont permettre de donner leur valeur aux
clés primaires des deux tables illustrées à la figure suivante. On suppose qu’on ne stockera
pas plus de 100 000 passagers et pas plus de 10 000 affrètements.
Servons-nous aussi de la séquence seqAff dans la table Passager pour indiquer le dernier vol
de chaque passager. seqAff sert à donner leur valeur à la clé primaire de Affreter et à la clé
étrangère de Passager.
Une fois créée, une séquence seqne peut se manipuler que via deux directives qu’Oracle
appelle aussi pseudo-colonnes) :
• seq.CURRVAL qui retourne la valeur courante de la séquence (lecture seule) ;
• seq.NEXTVAL qui incrémente la séquence et retourne la nouvelle valeur de celle-ci
(écriture et lecture).
Rôles et privilèges sont définis pour sécuriser l'accès aux données de la base
Ces concepts sont mis en œuvre pour protéger les données en accordant (ou retirant) des
privilèges a un utilisateur ou un groupe d'utilisateurs
Un rôle est un regroupement de privilèges. Une fois créé il peut être assigné à un utilisateur
ou à un autre rôle
Création de rôle
CREATE ROLE nom-de-rôle [IDENTIFIED BY mot-de passe ];
Ajout, modification, suppression de mot de passe
ALTER ROLE nom-de-rôle [IDENTIFIED BY mot-de passe ] ;
Suppression de rôle
DROP ROLE nom-de-rôle;
Lorsqu'un utilisateur est créé avec l'instruction CREATE USER, il ne dispose encore
d'aucun droit car aucun privilège ne lui a encore été assigné.
Il ne peut même pas se connecter à la base !
Il doit pouvoir se connecter, créer des tables, des vues, des séquences.
Pour lui assigner ces privilèges de niveau système il faut utiliser l'instruction GRANT dont
la syntaxe
L'ensemble de ces privilèges peuvent être assignés au sein d'une même commande
Pour assigner à l'utilisateur le droit de sélectionner, insérer, modifier et supprimer des lignes
dans la table vols de l'utilisateur UTIL1
Une liste de colonnes peut être indiquée dans l'instruction afin de restreindre davantage les
droits sur une table
L'utilisateur peut modifier la table util1.vols mais uniquement les colonnes NOM_Vol et
Cout_Vol
Remarque:
Pour pouvoir mettre à jour ou supprimer des lignes d'une table, les privilèges
UPDATE ET DELETE ne suffisent pas. Le privilège SELECT est nécessaire
Un utilisateur possède automatiquement tous les privilèges sur un objet qui lui
appartient
Un utilisateur ne peut pas donner plus de privilèges qu'il n'en a reçu
s'il n'a pas reçu le privilège avec l'option WITH GRANT OPTION, un utilisateur
ne peux pas assigner à son tour ce même privilège
création d’utilisateur
CREATE USER nom-d’utilisateur [IDENTIFIED BY mot-de passe ] ;
ajout, modification, suppression de mot de passe
ALTER USER nom-d’utilisateur [IDENTIFIED BY mot-de passe ] ;
suppression d’utilisateur
DROP USER nom-d’utilisateur;
attribution de privilèges
GRANT systeme-privileges | ALL [privileges ]
TO liste-roles-utilisateurs | PUBLIC
[WITH ADMIN OPTION ] ;
systeme-privileges :
CREATE ROLE
CREATE SEQUENCE
CREATE SESSION
CREATE SYNONYM
CREATE PUBLIC SYNONYM
CREATE TABLE
CREATE USER
CREATE VIEW
Suppression de privilèges
REVOKE liste-systeme-privileges
FROM liste-roles-utilisateurs
Suppression de privilèges sur des objets oracle
REVOKE liste-privileges
ON nom-composant
FROM liste-roles-utilisateurs
13/03/2023 Prof Y.FARHAOUI 68
SQL : langage de contrôle de données (LCD)
Gestion des utilisateurs et des privilèges
attribution de rôles
GRANT liste-roles
TO liste-roles-utilisateurs
[WITH ADMIN OPTION ] ;
suppression de rôles
REVOKE liste-roles
FROM liste-roles-utilisateurs
Une transaction est une unité logique composée d'une ou plusieurs instructions SQL.
Commande LMD 1
Commande LMD 2
................................
................................
................................
Commande LMD n
Une transaction commence implicitement à l’exécution de la première commande SQL et se
termine par un COMMIT pour validation ou un ROLLBACK pour annuler la transaction.
13/03/2023 Prof Y.FARHAOUI 70
Gestion des transactions
ORACLE est un système transactionnel qui assure la cohérence des données en cas de
mise à jour de la base, même si plusieurs utilisateurs lisent ou modifient les mêmes
données simultanément.
COMMIT: elle permet d’officialiser une mise à jour (INSERT, UPDATE, DELETE) ou
une transaction (série de commandes de manipulation de données effectuées depuis le
derniers COMMIT) sur la base de données.
ROLLBACK [TO nom_save_point]: permet d’annuler une transaction (un COMMIT).
SAVEPOINT : permet de fixer des points de sauvegarde.
Syntaxe : SAVEPOINT <nom_savepoint>.
Si l'utilisateur désire que l'on ne modifie pas une table pendant une session de travail,
celui-ci peut verrouiller la table en mode partagé au moyen de l'ordre sql suivant :
Mise à jour
Pour s'assurer l'accès exclusif en modification à une table, l'on peut verrouiller cette table
en mode exclusif par la commande :
chaque XXX est en général remplacé par un nom (en anglais) significatif. Ainsi
USER_TABLES est la vue de toutes MES tables, DBA_SYNONYMS est la vue de TOUS
les synonymes du système.