Sunteți pe pagina 1din 21

3

Interagir avec
le serveur Oracle

Copyright Oracle Corporation, 2001. Tous droits rservs.


Objectifs

A la fin de ce chapitre, vous pourrez :


crire une instruction SELECT correcte en PL/SQL
crire des instructions LMD en PL/SQL
contrler des transactions en PL/SQL
dterminer le rsultat de l'excution d'instructions
SQL LMD (Langage de manipulation de donnes)

3-2 Copyright Oracle Corporation, 2001. Tous droits rservs.


Instructions
Instructions SQL
SQL en
en PL/SQL
PL/SQL

Extraire
Extraire une
une ligne
ligne de
de donnes
donnes partir
partir d'une
d'une base
base
de
de donnes
donnes enen utilisant
utilisant la
la commande
commande SELECT
SELECT
Modifier
Modifier des
des lignes
lignes dede la
la base
base dede donnes
donnes en
en
utilisant
utilisant des
des instructions
instructions LMDLMD
Contrler
Contrler une
une transaction
transaction avecavec la
la commande
commande
COMMIT, ROLLBACK ou
COMMIT, ROLLBACK ou SAVEPOINT
SAVEPOINT
Dterminer
Dterminer lele rsultat
rsultat de
de l'excution
l'excution d'une
d'une
instruction
instruction LMD
LMD avec
avec des
des attributs
attributs de
de curseur
curseur
implicite
implicite

3-3 Copyright Oracle Corporation, 2001. Tous droits rservs.


Instructions SELECT en
Instructions SELECT en PL/SQL
PL/SQL

Extraire
Extraire les
les donnes
donnes de
de la
la base
base de
de donnes
donnes l'aide
l'aide
d'une
d'une instruction
instruction SELECT
SELECT
Syntaxe
Syntaxe ::

SELECT select_list
INTO {variable_name[, variable_name]...
| record_name}
FROM table
[WHERE condition];

3-4 Copyright Oracle Corporation, 2001. Tous droits rservs.


Instructions SELECT en
Instructions SELECT en PL/SQL
PL/SQL

La
La clause INTO est
clause INTO est obligatoire
obligatoire
Les
Les interrogations
interrogations doivent
doivent renvoyer
renvoyer une
une et
et une
une
seule
seule ligne
ligne
Exemple
Exemple ::
DECLARE
v_deptno NUMBER(4);
v_location_id NUMBER(4);
BEGIN
SELECT department_id, location_id
INTO v_deptno, v_location_id
FROM departments
WHERE department_name = 'Sales';
...
END;
/

3-6 Copyright Oracle Corporation, 2001. Tous droits rservs.


Extraire des donnes en PL/SQL

Extraire la date d'embauche et le salaire de l'employ


indiqu
Exemple :
DECLARE
v_hire_date employees.hire_date%TYPE;
v_salary employees.salary%TYPE;
BEGIN
SELECT hire_date, salary
INTO v_hire_date, v_salary
FROM employees
WHERE employee_id = 100;
...
END;
/

3-7 Copyright Oracle Corporation, 2001. Tous droits rservs.


Extraire
Extraire des
des donnes
donnes en
en PL/SQL
PL/SQL
Renvoyer
Renvoyer lala somme
somme des
des salaires
salaires de
de tous
tous les
les employs
employs
du
du service
service indiqu
indiqu
Exemple
Exemple ::
SET SERVEROUTPUT ON
DECLARE
v_sum_sal NUMBER(10,2);
v_deptno NUMBER NOT NULL := 60;
BEGIN
SELECT SUM(salary) -- group function
INTO v_sum_sal
FROM employees
WHERE department_id = v_deptno;
DBMS_OUTPUT.PUT_LINE ('The sum salary is ' ||
TO_CHAR(v_sum_sal));
END;
/

3-8 Copyright Oracle Corporation, 2001. Tous droits rservs.


Conventions
Conventions d'appellation
d'appellation

DECLARE
hire_date employees.hire_date%TYPE;
sysdate hire_date%TYPE;
employee_id employees.employee_id%TYPE := 176;
BEGIN
SELECT hire_date, sysdate
INTO hire_date, sysdate
FROM employees
WHERE employee_id = employee_id;
END;
/

3-9 Copyright Oracle Corporation, 2001. Tous droits rservs.


Manipuler
Manipuler les
les donnes
donnes en
en PL/SQL
PL/SQL

Modifier
Modifier des
des tables
tables de
de base
base de
de donnes
donnes en
en utilisant
utilisant
les
les instructions
instructions LMD
LMD suivantes
suivantes ::
INSERT
INSERT
UPDATE
UPDATE INSERT
DELETE
DELETE
MERGE M
MERGE UPDATE ER
GE

DELETE

3-10 Copyright Oracle Corporation, 2001. Tous droits rservs.


Insrer
Insrer des
des donnes
donnes

Ajouter
Ajouter les
les informations
informations relatives
relatives un
un nouvel
nouvel
employ
employ la
la table
table EMPLOYEES
EMPLOYEES
Exemple
Exemple ::
BEGIN
INSERT INTO employees
(employee_id, first_name, last_name, email,
hire_date, job_id, salary)
VALUES
(employees_seq.NEXTVAL, 'Ruth', 'Cores', 'RCORES',
sysdate, 'AD_ASST', 4000);
END;
/

3-11 Copyright Oracle Corporation, 2001. Tous droits rservs.


Mettre
Mettre jour
jour des
des donnes
donnes

Augmenter
Augmenter lele salaire
salaire de
de tous
tous les
les employs
employs chargs
chargs du
du
contrle
contrle des
des stocks
stocks
Exemple
Exemple ::

DECLARE
v_sal_increase employees.salary%TYPE := 800;
BEGIN
UPDATE employees
SET salary = salary + v_sal_increase
WHERE job_id = 'ST_CLERK';
END;
/

3-12 Copyright Oracle Corporation, 2001. Tous droits rservs.


Supprimer
Supprimer des
des donnes
donnes

Supprimer
Supprimer lesles lignes
lignes appartenant
appartenant au
au service
service 10
10
partir
partir de
de la
la table
table EMPLOYEES
EMPLOYEES
Exemple
Exemple ::

DECLARE
v_deptno employees.department_id%TYPE := 10;
BEGIN
DELETE FROM employees
WHERE department_id = v_deptno;
END;
/

3-13 Copyright Oracle Corporation, 2001. Tous droits rservs.


Fusionner des lignes
Insrer ou mettre jour des lignes dans la table
COPY_EMP, pour correspondre la table EMPLOYEES
DECLARE
v_empno employees.employee_id%TYPE := 100;
BEGIN
MERGE INTO copy_emp c
USING employees e
ON (e.employee_id = v_empno)
WHEN MATCHED THEN
UPDATE SET
c.first_name = e.first_name,
c.last_name = e.last_name,
c.email = e.email,
. . .
WHEN NOT MATCHED THEN
INSERT VALUES(e.employee_id, e.first_name, e.last_name,
. . .,e.department_id);
END;

3-14 Copyright Oracle Corporation, 2001. Tous droits rservs.


Conventions
Conventions d'appellation
d'appellation

Utiliser
Utiliser une
une convention
convention d'appellation
d'appellation pour
pour viter
viter
toute
toute ambigut
ambigut dans
dans la
la clause
clause WHERE
WHERE
Les
Les colonnes
colonnes dede base
base de
de donnes
donnes et et les
les
identificateurs
identificateurs doivent
doivent porter
porter des
des noms
noms diffrents
diffrents
Des
Des erreurs
erreurs de
de syntaxe
syntaxe peuvent
peuvent survenir
survenir carcar
PL/SQL
PL/SQL recherche
recherche en en premier
premier lieu
lieu une
une colonne
colonne dede
table
table dans
dans la
la base
base dede donnes
donnes
Les
Les noms
noms des
des variables
variables locales
locales etet les
les paramtres
paramtres
formels
formels ont
ont priorit
priorit sur
sur les
les noms
noms des
des tables
tables de
de la
la
base
base de
de donnes
donnes
Les
Les noms
noms dede colonne
colonne des
des tables
tables de
de la
la base
base de
de
donnes
donnes ontont priorit
priorit sur
sur les
les noms
noms desdes variables
variables
locales
locales

3-16 Copyright Oracle Corporation, 2001. Tous droits rservs.


Curseur
Curseur SQL
SQL

Un
Un curseur
curseur est
est une
une zone
zone de
de travail
travail rserve
rserve SQL
SQL
IlIl existe
existe deux
deux types
types de
de curseur
curseur ::
curseurs
curseurs implicites
implicites
curseurs
curseurs explicites
explicites
Le
Le serveur
serveur Oracle
Oracle utilise
utilise des
des curseurs
curseurs implicites
implicites
pour
pour analyser
analyser etet excuter
excuter les
les instructions
instructions SQL
SQL
Les
Les curseurs
curseurs explicites
explicites sont
sont dclars
dclars de
de manire
manire
explicite
explicite par
par le
le programmeur
programmeur

3-18 Copyright Oracle Corporation, 2001. Tous droits rservs.


Attributs
Attributs d'un
d'un curseur
curseur SQL
SQL

Grce
Grce aux
aux attributs
attributs d'un
d'un curseur
curseur SQL,
SQL, vous
vous pouvez
pouvez
tester
tester le
le rsultat
rsultat li
li l'excution
l'excution d'instructions
d'instructions SQL
SQL
SQL%ROWCOUNT Nombre de lignes affectes par la
dernire instruction SQL (valeur
entire)
SQL%FOUND Attribut boolen qui prend la valeur
TRUE si la dernire instruction SQL
affecte une ou plusieurs lignes
SQL%NOTFOUND Attribut boolen qui prend la valeur
TRUE si la dernire instruction SQL
n'affecte aucune ligne
SQL%ISOPEN Prend toujours la valeur FALSE car
PL/SQL ferme les curseurs
implicites immdiatement aprs leur
excution

3-19 Copyright Oracle Corporation, 2001. Tous droits rservs.


Attributs
Attributs de
de curseur
curseur SQL
SQL

Supprimer
Supprimer lesles lignes
lignes possdant
possdant l'ID
l'ID d'employ
d'employ indiqu
indiqu
dans
dans la
la table EMPLOYEES et
table EMPLOYEES et afficher
afficher le
le nombre
nombre de
de
lignes
lignes supprimes
supprimes
Exemple
Exemple ::

VARIABLE rows_deleted VARCHAR2(30)


DECLARE
v_employee_id employees.employee_id%TYPE := 176;
BEGIN
DELETE FROM employees
WHERE employee_id = v_employee_id;
:rows_deleted := (SQL%ROWCOUNT ||
' row deleted.');
END;
/
PRINT rows_deleted

3-20 Copyright Oracle Corporation, 2001. Tous droits rservs.


Instructions
Instructions de
de gestion
gestion des
des transactions
transactions

Initialiser
Initialiser une
une transaction
transaction avec
avec la
la premire
premire
instruction
instruction LMD
LMD suivant COMMIT ou
suivant COMMIT ou ROLLBACK
ROLLBACK
Utiliser
Utiliser les
les instructions
instructions SQL COMMIT et
SQL COMMIT et ROLLBACK
ROLLBACK
pour
pour mettre
mettre fin
fin explicitement
explicitement une
une transaction
transaction

3-21 Copyright Oracle Corporation, 2001. Tous droits rservs.


Synthse
Synthse

Ce
Ce chapitre
chapitre vous
vous aa permis
permis d'apprendre
d'apprendre ::
intgrer
intgrer du
du code
code SQL
SQL dans
dans un
un bloc
bloc PL/SQL
PL/SQL enen
utilisant
utilisant SELECT,
SELECT, INSERT,
INSERT, UPDATE, DELETE et
UPDATE, DELETE et
MERGE
MERGE
intgrer
intgrer des
des instructions
instructions de
de gestion
gestion des
des
transactions
transactions dans
dans un
un bloc
bloc PL/SQL
PL/SQL enen utilisant
utilisant
COMMIT, ROLLBACK et
COMMIT, ROLLBACK et SAVEPOINT
SAVEPOINT

3-22 Copyright Oracle Corporation, 2001. Tous droits rservs.


Synthse
Synthse

Ce
Ce chapitre
chapitre vous
vous aa appris
appris les
les rgles
rgles suivantes
suivantes ::
ilil existe
existe deux
deux types
types de
de curseur
curseur :: implicites
implicites et
et
explicites
explicites
les
les attributs
attributs d'un
d'un curseur
curseur implicite
implicite permettent
permettent de
de
vrifier
vrifier lele rsultat
rsultat de
de l'excution
l'excution d'instructions
d'instructions
LMD
LMD ::
SQL%ROWCOUNT
SQL%ROWCOUNT
SQL%FOUND
SQL%FOUND
SQL%NOTFOUND
SQL%NOTFOUND
SQL%ISOPEN
SQL%ISOPEN
les
les curseurs
curseurs explicites
explicites sont
sont dfinis
dfinis par
par le
le
programmeur
programmeur

3-23 Copyright Oracle Corporation, 2001. Tous droits rservs.


Prsentation
Prsentation de
de l'exercice
l'exercice 33

Dans
Dans cet
cet exercice,
exercice, vous
vous allez
allez crer
crer un
un bloc
bloc PL/SQL
PL/SQL pour
pour ::
slectionner
slectionner des
des donnes
donnes dans
dans une
une table
table
insrer
insrer des
des donnes
donnes dans
dans une
une table
table
mettre
mettre jour
jour des
des donnes
donnes dans
dans une
une table
table
supprimer
supprimer un
un enregistrement
enregistrement d'une
d'une table
table

3-24 Copyright Oracle Corporation, 2001. Tous droits rservs.

S-ar putea să vă placă și