Académique Documents
Professionnel Documents
Culture Documents
dfinition de donnes
Pr: E. Saad
15/12/2014
Table
Vue
Squence
Index
Synonyme
15/12/2014
Cration de Tables
Syntaxe :
CREATE TABLE nomtable
(champs typechamps [DEFAULT valeur], ...);
CREATE TABLE nomtable
[(champs1, champs2...)] as sousinterrogation;
15/12/2014
Cration de Tables
Types de donnes
Description
VARCHAR2(taille)
CHAR(taille)
caractres maximum)
NUMBER(taille,dcimale)
DATE
LONG
LONG RAW
Binaire(image)
15/12/2014
Cration de Tables
CREATE TABLE dept
( deptno NUMBER(2),
dname VARCHAR2(15),
loc VARCHAR2(12));
CREATE TABLE
Empclerk
hiredate, deptno
FROM emp
WHERE job like 'clerk');
15/12/2014
15/12/2014
15/12/2014
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
15/12/2014
15/12/2014
NomContrainte [CASCADE];
NomTable
DISABLE CONSTRAINT
NomContrainte [CASCADE];
NomTable
ENABLE CONSTRAINT
NomContrainte [CASCADE];
15/12/2014
15/12/2014
Langage
Table Dept
Table SALGRADE
15/12/2014
Lordre Select
Lutilisation la plus frquente de SQL seffectue dans les requtes
afin de rechercher les donnes dans une base de donnes.
Syntaxe
select [distinct] * | <liste des champs >
From <Liste des tables>
[where <critre de slection >]
[group by <critres de regroupement>]
[having <conditions de filtrage sur les groupes>]
Les
distinctes.
15/12/2014
Exemple de SELECT
SELECT *
FROM
dept;
DEPTNO
--------10
20
30
40
DNAME
-------------ACCOUNTING
RESEARCH
SALES
OPERATIONS
LOC
------------NEW YORK
DALLAS
CHICAGO
BOSTON
LOC
------------NEW YORK
DALLAS
CHICAGO
BOSTON
Exemple de SELECT
SELECT *
FROM
dept;
DEPTNO
--------10
20
30
40
DNAME
-------------ACCOUNTING
RESEARCH
SALES
OPERATIONS
SELECT deptno
FROM
emp;
DEPTNO
--------10
30
10
20
...
14 rows selected.
15/12/2014
LOC
------------NEW YORK
DALLAS
CHICAGO
BOSTON
SELECT DISTINCT deptno
FROM
emp;
DEPTNO
--------10
20
30
LAlias
de
Colonne
Permet de renommer un en-tte de colonne (champs)
Suit immdiatement le nom de la colonne ; le mot-cl AS peut
tre plac entre le nom et lalias est optionnel
Doit
15/12/2014
Le
littral
Un littral est un caractre, une expression, ou un nombre
inclus dans la liste SELECT.
Les
JOB
DEPTNO
--------- --------CLERK
30
CLERK
20
CLERK
20
CLERK
10
Les oprateurs
15/12/2014
Utilisation
des Oprateurs
ename, sal
SELECT
FROM
WHERE
emp
sal BETWEEN 1000 AND 1500;
ENAME
SAL
---------- --------MARTIN
1250
TURNER
1500
WARD
1250
ADAMS
1100
MILLER
1300
SELECT
FROM
WHERE
Limite
infrieure
suprieure
EMPNO
--------7902
7369
7788
7876
15/12/2014
Limite
ENAME
SAL
MGR
---------- --------- --------FORD
3000
7566
SMITH
800
7902
SCOTT
3000
7566
ADAMS
1100
7788
ename
emp
ename LIKE 'S%';
SELECT
FROM
WHERE
ename
emp
ename LIKE '_A%';
ENAME
---------JAMES
WARD
15/12/2014
WHERE
WHERE
WHERE
WHERE
...
...
...
...
...
15/12/2014
JOB
--------PRESIDENT
SALESMAN
SALESMAN
SALESMAN
SALESMAN
AVG ([DISTINCT|ALL]n)
COUNT ({ *|[DISTINCT|ALL]expr})
MAX ([DISTINCT|ALL]expr)
MIN ([DISTINCT|ALL]expr)
SUM ([DISTINCT|ALL]n)
15/12/2014
15/12/2014
COUNT(*)
deptno = 30;
SELECT AVG(comm)
FROM
emp;
AVG(COMM)
--------550
SELECT AVG(NVL(comm,0))
FROM
emp;
AVG(NVL(COMM,0))
---------------157.14286
15/12/2014
Cration
de
Groupes
de
Donnes
DEPTNO
SAL
EMP
--------- --------10
2450
10
5000
10
1300
20
800
20
1100
20
3000
20
3000
20
2975
30
1600
30
2850
30
1250
30
950
30
1500
30
1250
SELECT
deptno, AVG(sal)
FROM
emp
GROUP BY deptno;
15/12/2014
2916.6667
"salaire
moyen pour
chaque
2175
dpartement
de la table
EMP"
1566.6667
DEPTNO AVG(SAL)
------- --------10 2916.6667
20
2175
30 1566.6667
15/12/2014
MAX(AVG(SAL))
------------2916.6667
15/12/2014
Les
affichs.
15/12/2014
deptno, max(sal)
emp
deptno
max(sal)>2900;
DEPTNO MAX(SAL)
--------- --------10
5000
20
3000
15/12/2014
JOB
PAYROLL
--------- --------ANALYST
6000
MANAGER
8275
15/12/2014
Les Sous-Interrogations
Syntaxe
SELECT select_list
FROM tables
WHERE expr operator (SELECT select_list FROM tables )
;
Types de Sous-Interrogations
Sous-interrogation
mono-ligne
Oprateurs mono-ligne
15/12/2014
Sous-interrogation
multi-ligne
Oprateurs multi-ligne
AND
ename, job
emp
job =
(SELECT
FROM
WHERE
sal >
(SELECT
FROM
WHERE
ENAME
JOB
---------- --------MILLER
CLERK
15/12/2014
CLERK
job
emp
ename = 'ADAMS')
1100
sal
emp
ename = 'ADAMS');
emp
sal =
(SELECT
FROM
800
MIN(sal)
emp);
ENAME
JOB
SAL
---------- --------- --------SMITH
CLERK
800
SELECT
FROM
GROUP BY
HAVING
15/12/2014
deptno, MIN(sal)
emp
deptno
800
MIN(sal) >
(SELECT MIN(sal)
FROM
emp
WHERE
deptno = 20);
AND
EMPNO
--------7654
7521
15/12/2014
ENAME
---------MARTIN
WARD
JOB
--------SALESMAN
SALESMAN
EMPNO
--------7839
7566
7902
7788
15/12/2014
ENAME
---------KING
JONES
FORD
SCOTT
JOB
--------PRESIDENT
MANAGER
ANALYST
ANALYST
VALUES
20);
15/12/2014
15/12/2014
Nomtable
SET
[WHERE
condition];
15/12/2014
UPDATE
emp
SET
com =0
WHERE
com is NULL;
UPDATE emp
SET mgr = (SELECT empno
FROM emp
WHERE (deptno = 30) AND (job like 'MANAGER') ) ,
job ='SALSESMEN'
WHERE deptno = 30;
15/12/2014
condition];
La
DELETE
dept
WHERE
dname = 'FINANCES';
DELETE FROM
emp
WHERE
deptno =
(SELECT deptno
FROM
dept
15/12/2014
Notion de vue
Une vue est une table virtuelle base sur une ou plusieurs
table (ou sur dautres vues). Cest une fentre par laquelle il est
possible de visualiser ou de modifier des donnes venant de
15/12/2014
15/12/2014
Select *
from manager ;
15/12/2014
15/12/2014
Partie III:
Langage De contrle de donnes
Privilges
Un privilge donne le droit d'excuter certains oprations sur la
15/12/2014
Compte utilisateur
L'ordre CREATE USER permet l'administrateur de base de
donnes de crer de nouveau utilisateurs.
Syntaxe
15/12/2014
15/12/2014
Privilge Systme
CREATE SESSION
CREATE TABLE
CREATE VIEW
Oprations autorises
Connexion la base de donnes
Cration de tables dans le schma de lutilisateur
Cration d'une vue dans le schma de lutilisateur
15/12/2014
15/12/2014
Privilges objets
Le propritaire dun objet dune base de donnes peut accorder
certaines privilges autorisant la manipulation du contenu de cet
objet.
Exemple de privilges
SELECT, ALTER , DELETE , INSERT, REFERENCES, UPDATE
15/12/2014
15/12/2014
15/12/2014
Panne du systme
15/12/2014
UPDATE ...
SAVEPOINT point1;
Savepoint created.
DELETE
ROLLBACK TO point1;
Rollback complete.
15/12/2014
15/12/2014
Le langage PL/SQL
Le PL/SQL est une extension du SQL avec des caractristiques
propres aux langages de programmation.
15/12/2014
DECLARE Optionel
Variables, curseurs
BEGIN Obligatoire
Instructions SQL
Instructions PL/SQL
EXCEPTION Optionel
DECLARE
BEGIN
EXCEPTION
END;
15/12/2014
Types de Blocs
Anonyme
Procdure
Fonction
[DECLARE]
PROCEDURE nom
IS
BEGIN
--instructions
BEGIN
--instructions
[EXCEPTION]
[EXCEPTION]
FUNCTION nom
RETURN datatype
IS
BEGIN
--instructions
RETURN valeur;
[EXCEPTION]
END;
END;
END;
15/12/2014
Exemples
Declare
v_hiredate
v_deptno
v_location
c_comm
v_total_sal
v_valid
15/12/2014
DATE;
NUMBER(2) NOT NULL := 10;
VARCHAR2(13) := 'Atlanta';
CONSTANT NUMBER := 1400;
NUMBER(9,2) := 0;
BOOLEAN NOT NULL := TRUE;
LAttribut %TYPE
Dclarer une variable partir de :
15/12/2014
emp.ename%TYPE;
NUMBER(7,2);
v_balance%TYPE := 10;
/* et */.
15/12/2014
Oprateurs en PL/SQL
Oprateur
**, NOT
*, /
+, -, ||
=, !=, <, >, <=, >=, IS NULL,
LIKE, BETWEEN, IN
AND
OR
15/12/2014
Opration
Exponentielle, ngation logique
ngation
Multiplication, division
Addition, soustraction,
concatnation
Comparaison
Conjonction
Inclusion
15/12/2014
Exemple :
DECLARE
v_deptno
v_loc
BEGIN
SELECT
INTO
FROM
WHERE
...
END;
15/12/2014
NUMBER(2);
VARCHAR2(15);
deptno, loc
v_deptno, v_loc
dept
dname = 'SALES';
Exemple
DECLARE
v_sum_sal
v_deptno
BEGIN
SELECT
INTO
FROM
WHERE
END;
15/12/2014
emp.sal%TYPE;
NUMBER NOT NULL := 10;
SUM(sal)
v_sum_sal
emp
deptno = v_deptno;
Exemple
DECLARE
v_sal_increase
emp.sal%TYPE := 2000;
BEGIN
UPDATE
emp
SET
sal = sal + v_sal_increase
WHERE
job = 'ANALYST';
END;
15/12/2014
Exercice
Ecrire un bloc anonyme PLSQL qui saisie le numro (Empno) d'un employ et qui affiche
son
nom(Ename),
sa
fonction(Job),
son
salaire(Sal)
et
le
nom
de
son
dpartement(Dname).
DECLARE
num scott.emp.empno%TYPE; nomE scott.emp.ename%TYPE;
salaire scott.emp.sal%TYPE;
Fct scott.emp.job%TYPE;
nomD scott.dept.dname%TYPE;
begin
num= '&num';
SELECT Ename, Job, Sal, Dname into nomE , Fct, salaire, nomD FROM emp , Dept where
emp. Deptno=Dept.deptno and empno=num;
dbms_output.put_line('Emplot : ' || nomE || ' Fonction :'|| Fct ||
' Salaire :'|| salaire || ' Dept :'|| nomD);
end;
/
La Commande set serveroutput on permet de diriger les sorties de ligne vers lcran
plutt que vers un buffer.
15/12/2014
Exercice
Ecrire une procdure PLSQL nomme Affiche qui reoit en entre le numro (Empno)
d'un employ et qui affiche son nom(Ename), sa fonction(Job), son salaire(Sal) et le nom
de son dpartement(Dname).
Exercice
Ecrire une fonction PLSQL nomm MoySal qui reoit le paramtre job lentre et
qui retourne le salaire moyen des employs qui ont ce job.
15/12/2014
Exercice
En utilisant la procdures et la fonction prcdente (Affiche et MoySal ), crire un bloc
PLSQL anonyme qui :
Demande le numro dun Employ (Empno)
Affiche les informations de lemploy correspondant ainsi que le salaire moyen
des employs ayant le mme job que cet employ.
DECLARE
numE scott.emp.empno%TYPE;
moy scott.emp.sal%TYPE;
jobrech scott.emp.job%TYPE;
begin
numE := '&numE';
affiche(numE);
SELECT job into jobrech FROM emp where empno = numE;
moy:= MoySal(jobrech);
dbms_output.put_line('Moy des salaires est :'|| moy);
end;
/
15/12/2014
instructions conditionnelles IF
On peut modifier lenchanement logique des instructions en
utilisant des instructions conditionnelles IF.
Syntaxe
IF condition THEN
instructions;
[ELSIF condition THEN
instructions;]
[ELSE
instructions;]
END IF;
15/12/2014
Boucles Basiques
Syntaxe
LOOP
instruction1;
. . .
EXIT [WHEN condition];
END LOOP;
-----
initialisation
instructions
EXIT instruction
fermeture de la boucle
Exemple
DECLARE
v_ordid
item.ordid%TYPE := 601;
v_counter
NUMBER(2) := 1;
BEGIN
LOOP
INSERT INTO item(ordid, itemid)
VALUES(v_ordid, v_counter);
v_counter := v_counter + 1;
EXIT WHEN v_counter > 10;
END LOOP;
END;
15/12/2014
15/12/2014
Curseur SQL
Un curseur est une zone de travail rserve SQL.
Le Serveur Oracle utilise les curseurs implicites pour analyser et
15/12/2014
Crer une
zone SQL
nomme
15/12/2014
OPEN
FETCH
Identifier
Charger la
lensemble
actif de
lignes
ligne
courante
dans des
variables
Existence?
Tester
lexistence
de lignes
si OUI,
Retourner
FETCH
CLOSE
Librer
lensemble
actif
Dclarer un Curseur
Syntaxe
CURSOR cursor_name IS
select_statement;
OPEN
cursor_name;
CLOSE
cursor_name;
15/12/2014
Type
Description
%ISOPEN
Boolean
ouvert.
%NOTFOUND
Boolean
valu TRUE si le dernier fetch
na pas retourn de ligne.
%FOUND
Boolean
valu TRUE si le dernier fetch
a retourn une ligne ;
complment de %NOTFOUND
%ROWCOUNT
Number
Contient le nombre total de lignes
retournes jusquici.
15/12/2014
Exercice
nom(Ename) et sa fonction(Job).
Exercice
15/12/2014
Exercice
DECLARE
n number; i number :=0; nom scott.emp.ename%TYPE;
Dtemb scott.emp.hiredate%TYPE; Fct scott.emp.job%TYPE;
CURSOR E_Rech IS SELECT ename, hiredate, job FROM emp order by hiredate ASC;
BEGIN
n := '&nombre';
if (n =0) then
dbms_output.put_line('N ne peut pas etre null');
else
open E_Rech ;
loop
i:=i+1;
FETCH E_Rech INTO nom,dtemb,Fct;
if (E_Rech %FOUND AND i<=n) then
dbms_output.put_line('Nom : ' || nom || Date embouche :' || Dtemb);
dbms_output.put_line('Fonction : '|| Fct);
end if;
EXIT WHEN (E_Rech %NOTFOUND or i>n);
end loop;
if (E_Rech %NOTFOUND ) then
dbms_output.put_line('N est plus grand que le nb des employ ');
end if;
end;
15/12/2014
Syntaxe
Curseurs paramtrs
15/12/2014
Syntaxe
EXCEPTION
WHEN exception1 [OR exception2 . . .] THEN
instruction1;
instruction2;
. . .
15/12/2014
Exception pr-dfinie
Syntaxe
BEGIN SELECT ... COMMIT;
EXCEPTION
WHEN INVALID_CURSOR THEN
instruction1;
instruction2;
WHEN TOO_MANY_ROWS THEN
instruction1;
WHEN OTHERS THEN
instruction1;
instruction2;
instruction3;
END;
15/12/2014
NUMBER;
VARCHAR2(255);
SQLCODE ;
:= SQLERRM ;
15/12/2014
Exercice
15/12/2014