Vous êtes sur la page 1sur 16

INTRODUCTION A ORACLE

M. MOSBAH
2eme A. Info
Introduction

Developpe par ORACORP.


1979 : 1ere installation.
1984: plus de 600 installations.
Societe ORACLE:
1er fournisseur mondial de SGBD.
2eme editeur mondial de logiciels.
CA: 5 684 M$
Implantation: 140 pays.
http://www.oracle.com/
Societe ORACLE FRANCE:
Creation: Avril 1986.
CA: 1 171 MF.
8000 installations.
1010 personnes.
http://www.oracle.fr/

1
Architecture

SQL*PLUS
SQL* SQL*
Forms SQL Report

SQL* Dictionn
Report
Noyau
PRO*

SQL*
Calc
SQL*
GRAPH
Utilitaires

Noyau:
Execution optimale de requetes.

Gestion daccelerations (deux types):


index: acc`es direct aux lignes.
cluster: tables ayant des colonnes communes frequemment accedees.
Stockage physique de donnees: Utilisation du syst`eme dexploitation pour
stocker les donnees.
Dictionnaire: Description dynamique de la base de donnees.
les objets de la base (tables, colonnes, vues, synonymes, clusters, . . . ),

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.

SQL: interface entre le noyau et les outils de la couche externe.

SQL*PLUS: parametrage environnement, formatage des resultats,


memorisation des commandes SQL (fichier de commandes).

SQL*Forms: utilisation de menus sans programmer en SQL.

SQL*Report: production de rapports (resultats de requetes).

SQL*Graph: aide a` la decision (representation graphique: courbes,


camembert, . . . ).

SQL*Calc: tableur compatible LOTUS 1-2-3.

SQL*Menu: Definir et effectuer un choix entre plusieurs actions presentees


sous forme de plusieurs menus.

PROC*: interface de programmation permettant lacc`es depuis les langages


classiques (C, COBOL, FORTRAN,. . . ). Les pr`ecompilateurs traduisent les
commandes SQL inserees dans un programme ecrit en langage hote (POR*C,
PRO*COBOL,. . . ).

Architecture repartie dORACLE: Repartition des applications.


Mod`ele client-serveur (Client: application supportee par des machines
distantes, Serveur: machine gerant une BDO).
. Le serveur est decharge des traitements des applications.
SQL*Net permet dutiliser les protocoles de communication.

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;

executee uniquement par le DBA.


2. permettre a` U1 de creer des tables et des accelerateurs sur les tables.
grant resource
to U1;

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]

Les droits sont: SELECT, INSERT, UPDATE, DELETE, ALTER,


INDEX, ALL.
UPDATE: peut concerner seulement quelques colonnes
(UPDATE(col1,col2)).
ALTER: modification ou ajout de colonnes dans une table.
with grant option : permet de le passer a` dautres.

Exemple.
grant SELECT, UPDATE
on client
to utilisateur;

permet dattribuer a` utilisateur le droit de selection et de MAJ de la


table client.
La commande inverse:
revoke droit
on objet
from 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

Formatage des resultats


Le resultat dune commande saffiche a` lecran.
La commande SPOOL permet de memoriser ce resultat dans un fichier.

Formatage dune page


nombre de lignes par page et nombre de caract`eres par ligne (utile pour
imprimer).
set pagesize n n est le nombre de lignes par page
set linesize m m est le nombre de caract`eres par ligne.

La commande TTITLE permet de definir un en-tete.


TTITLE CENTER Liste des clients RIGHT 21-02-93 SKIP 2;
Pour le bas de page: BTITLE.
Formatage dune colonne
pour changer de format:
COLUMN <colonne> <option>
COL: donne les options definies.
JUSTIFY specifie si le titre est a` cadrer a` droite, a` gauche ou au centre.

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;

Controle et edition de commandes


Memorisation de commandes SQL*PLUS
commande SQL tampon SQL
perdue si une autre commande est tapee ou exit.
save <fichier>; memorise ce tampon dans un fichier. Loperation inverse est
get <fichier>;.

Pour charger un fichier et lexecuter immediatement, il faut utiliser la


commande: start <fichier>;

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
..
.

possibilite de preciser le type de la variable lue.


PAUSE permet de faire un arret jusqu`a une touche.
CLEAR SCREEN.

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

Probl`eme de valeur nulle !


Comment savoir que la valeur dune variable hote est nulle ? (pas de sens en
C)
utilisation dun indicateur (flag).
Permet de detecter une valeur nulle, et donner des renseignements sur le
deroulement dune commande SQL.
A chaque variable hote un indicateur de type short.
Apr`es lexecution dune commande SQL, la valeur de lindicateur est:
0 si la variable a recu une valeur non nulle et non tronquee
-1 si valeur nulle (NULL)
n (>0) si la valeur affectee a` la variable a ete tronquee.
Utilisation :variable:indicateur
Exemple.
EXEC SQL SELECT Sal INTO :salaire:sal ind FROM EMP where EMPNO
= :emp nombre;
if (sal ind == -1) printf(\n Salaire nulle);
Remarque:
lindicateur ne peut pas etre utilise dans une instruction WHERE pour

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.

Gestion des erreurs


echec dune commande SQL (actions a` entreprendre)
si rien nest prevu, poursuite du programme si erreur dans une commande
SQL
SQLCA.H contient des variables predefinies pour gerer les erreurs
pour linclure:
EXEC SQL INCLUDE SQLCA;
SQLCA.H contient une structure sqlca contenant essentiellement:
sqlcode: (de type long) contient le code de retour de la derni`ere
commande SQL
= 0 si pas derreur
> 0 pas derreur mais exception (ex. 1403 si pas de ligne qui
correspond a` la condition WHERE)
< 0 code erreur (la commande SQL nest pas executee).
sqlerrm.sqlerrml : contient la longueur du message derreur.
sqlerrm.sqlerrmc: contient le message derreur.
sqlwarn[0] : contient W si warning . . . .
Utilisation de la commande WHENEVER
actions a` entreprendre

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 :

STOP: arret du prog et annulation de loperation.


CONTINUE: ne pas tenir compte et poursuite.
GOTO <etiq>: branchement vers <etiq>
DO appel fonction() | break
une commande WHENEVER reste valable pour SQL juqu`a la prochaine
WHENEVER.
Connexion `a ORACLE
pour se connecter a` ORACLE:
EXEC SQL CONNECT :nom user IDENTIFIED BY :mot pssd;
ou
EXEC SQL CONNECT :id user;
o`
u id user est nom user/mot pssd.
une autre methode interactive consiste a` saisir le nom de lutilisateur et son
mot de passe.

15

Vous aimerez peut-être aussi