Académique Documents
Professionnel Documents
Culture Documents
M. MOSBAH
2eme A. Info
Introduction
1
Architecture
SQL*PLUS
SQL* SQL*
Forms SQL Report
SQL* Dictionn
Report
Noyau
PRO*
SQL*
Calc
SQL*
GRAPH
Utilitaires
Noyau:
Execution optimale de requetes.
2
les utilisateurs du syst`eme (noms et mots de passe),
les privil`eges et les droits des utilisateurs sur differents objets.
Mise a` jour apr`es toute operation.
3
Utilisateurs ORACLE
1. Gestion des utilisateurs
3 categories dutilisateurs:
- CONNECT
- RESOURCE
- DBA
CONNECT: ont les privil`eges suivants:
se connecter a` la base et changer leurs mots de passe,
creer des vues, des synonymes et des liens (links) sur les objets
autorises.
effectuer un export de leurs propres vues,
pas le droit de creer des tables, des index, des clusters, et des sequences.
RESOURCE: CONNECT +
creer des tables, des index, des clusters, et des sequences,
auditer lacc`es a` leurs objets,
donner des autorisations de manipulation de leurs propres objets a`
dautres utilisateurs.
DBA: Gestionnaire de la base :
creer et supprimer des utilisateurs,
acceder a` tous les objets de la base,
creer et supprimer les tablespaces et les rollback segments.
Exemple:
1. Creation dun nouvel utilisateur U1 juste avec le droit de connexion.
grant connect
to U1
identified by mot de passe1;
4
3. changer le mot de passe de U1. grant connect
to U1
identified by mot de passe2;
Un utilisateur Oracle peut etre supprime a` tout moment ou se voir demuni
de certains privil`eges.
revoke [connect,] [resource,] [dba]
from U1;
2. Gestion des autorisations
tout utilisateur est proprietaire des objets quil a crees.
il peut donner des autorisations soit a` des utilisateurs nommes , soit a` tous
les utilisateurs de la base (PUBLIC).
grant droit
on objet
to utilisateur,
[with grant option]
Exemple.
grant SELECT, UPDATE
on client
to utilisateur;
Remarque:
revoke all
on client
5
from public
interdire toute operation a` tous les utilisateurs sur la table client (table
privee).
6
SQL*PLUS
1. Presentation
interface interactive,
formatage des resultats (choix de presentation, colonnes, page),
aide
controle et edition des commandes SQL*PLUS (sauvegarde, execution, . . . ),
gestion des transactions,
mesure des performances.
2. Connexion a` SQL*PLUS
/opt/oracle/bin
%sqlplus
ou
%sqlplus user/mot de passe
7
On peut aussi specifier un fichier de commandes:
%sqlplus@fichier
la premi`ere ligne: nom utilisateur/mot de passe
sql>
sql> help commande
sql> help insert
sql> describe table
sql> exit
Remarque:
une commande SQL est sauvegardee dans un buffer (SQL buffer).
RUN execute la derniere commande (ou /).
Pour lancer une commande sous UNIX :
SQL> HOST ls *.sql
Exemple:
COLUMN sal FORMAT F9999,99
Totalisation
8
La commande compute permet deffectuer un calcul sur une ou plusieurs
colonnes.
SUM: somme.
COUNT: compter le nombre de lignes ayant une valeur non nulle.
NUMBER: de meme (+ valeurs nulles).
MIN, MAX, AVG, VAR, STD.
Exemple:
ajout dune ligne contenant un cumul des valeurs de commandes
COMPUTE SUM OF montant ON idclient;
Edition de commandes
EDIT est lediteur integre a` SQL*PLUS.
Pour changer dediteur:
DEFINE EDITOR = emacs
(dans le login.sql)
Parametrage de commandes:
utilisation des variables et des param`etres (arguments).
les param`etres sont designes par &chiffre.
(&1, &2, . . . , &9)
la commande START peut etre parametree:
START <fichier> par1 par2 . . .
le param`etre par1 remplace &1.
Exemple.
select * from client where ville = &1;
START liste client Paris
une variable est une chane de caract`eres qui commence par &.
9
A lexecution, la valeur dune variable est demandee.
ACCEPT saisir des valeurs.
PROMPT afficher un message.
Exemple:
SQL> PROMPT Donner un titre.
> ACCEPT TITRE PROMPT Titre:
> TTITLE CENTER TITRE SKIP 2
> SELECT * FROM EMP
>
SQL> SAVE PROMPT1
SQL> START PROMPT1
Donner un titre
Titre: Rapport departemental
Rapport departemental
..
.
10
Precompilateur PRO*C
Introduction
SQL est non procedural
simplification, . . . mais
pas de structures de controle
Solution ORACLE: inserer des requetes SQL dans un programme (C,
COBOL,FORTRAN,. . . )
precompilateurs pro*Langage (C,PASCAL,FORTRAN,COBOL,PL1)
Presentation PRO*C
Programme C
+
SQL
PRO*C
Programme C
Compil
Fichier
executable
11
Syntaxe:
proc INAME = fichier.pc
fichier.c (`a compiler)
Declaration de variables
La declaration de variables se fait dans une zone delimitee par les deux
instructions suivantes:
EXEC SQL BEGIN DECLARE SECTION;
...
EXEC SQL END DECLARE SECTION;
declaration de variables hotes (des variables C utilisees dans SQL).
Exemple:
EXEC SQL BEGIN DECLARE SECTION;
int emp nombre;
float salaire;
short sal ind;
EXEC SQL END DECLARE SECTION;
Dans les requetes SQL, il faut prefixer les variables par :
:salaire, :sal ind
12
chercher des valeurs nulles.
ex. comm ind = -1;
EXEC SQL DELETE FROM EMP WHERE Comm =
:commission:comm ind; /*faux*/
EXEC SQL DELETE FROM EMP WHERE Comm IS NULL;
Declaration de tableaux
EXEC SQL BEGIN DECLARE SECTION;
int emp nombre[50];
char emp nom[50][10];
float salaire[50];
EXEC SQL END DECLARE SECTION;
Remarques:
les tableaux de pointeurs ne sont pas autorises (de meme les tableaux
multidimensionnels)
a` une exception: les tableaux a` 2 dimensions de caract`eres (car pas de
chanes en C).
si plusieurs tableaux dans une meme declaration, ils doivent avoir la meme
taille, sinon ORACLE consid`ere le tableau de taille minimale dans SQL.
les tableaux ne doivent pas etre indices dans une commande SQL
utilisation des tableaux dindicateurs (exemple)
pas de melange de tableaux hotes et de variables hotes dans VALUES,
SET, INTO ou WHERE.
Il est possible de definir des pointeurs.
EXEC SQL BEGIN DECLARE SECTION;
int *int ptr;
char *char ptr;
EXEC SQL END DECLARE SECTION;
utilisation:
EXEC SQL SELEECT IntCol INTO :int ptr FROM . . .
la taille est determinee par le type (sauf les chanes)
Variables VARCHAR
permet de declarer des chaines de tailles variables
13
Cest une structure de meme nom que la variable contenant la longueur et
un tableau de caract`eres.
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR nom client[20];
VARCHAR id client[6];
EXEC SQL END DECLARE SECTION;
est equivalente a`
struct{
unsigned short len;
char arr[20];
}nom client
si nom client est en entree (INSERT ...) alors il faut initialiser len.
en sortie, len est donne par ORACLE.
Dans les commandes SQL utiliser nom client.
Dans C utiliser les champs len et arr.
14
EXEC SQL WHENEVER <evenement> <action>;
ou <evenement> est :
SQLERROR: une erreur se produit (sqlca.sqlcode <0)
SQLWARNING: si warning (sqlca.salwarm[0] = W)
NOT FOUND: aucune ligne ne verifie la condition (sqlca.sqlcode =
1403)
<action> est :
15