Vous êtes sur la page 1sur 20

Chapitre 2:

Interaction avec
Oracle

PL

Objectifs

Utiliser les commandes SELECT, INSERT, UPDATE et


DELETE dans les blocs PL/SQL.

Dterminer le rsultat des ordres SQL en utilisant les


attributs du curseur implicite.

Contrler les transactions avec PL/SQL.

2-2

Commandes SQL dans PL/SQL

Extraire une ligne de la base de donnes en utilisant la


commande SELECT.

Modifier les lignes de la base de donnes en utilisant des


commandes LMD.

Contrler une transaction avec les commandes COMMIT


et ROLLBACK.

2-4

Retrouver des Donnes - Syntaxe

Retrouver des lignes de la base de donnes avec le SELECT


SELECT
INTO
FROM
WHERE

select_list
variable_name | record_name
table
condition ;

La clause INTO est obligatoire.


Une seule ligne doit tre retourne.
Toute la syntaxe du SELECT est disponible.

2-6

Retrouver des Donnes - Exemple


Retrouver les date de commande et de livraison pour unecommande spcifie
ACCEPT p_ord_id PROMPT 'Numero de commande :'
VARIABLE g_result VARCHAR2(80)
-- Dbut du bloc PL -DECLARE
v_date_ordered s_ord.date_ordered%TYPE;
v_date_shipped s_ord.date_shipped%TYPE;
BEGIN
SELECT
date_ordered, date_shipped
INTO
v_date_ordered, v_date_shipped
FROM
s_ord
WHERE
id = &p_ord_id;
:g_result := 'Commande : '||TO_CHAR(&p_ord_id) ||' Date commande : '
|| TO_CHAR(v_date_ordered)|| ' Date livraison : '
|| TO_CHAR(v_date_shipped);
END;
-- Fin du bloc PL -/
PRINT g_result

2-8a

Retrouver des Donnes - Exemple


Retrouver toutes les informations d'un dpartement donn.
DECLARE
dept_record
BEGIN
SELECT
INTO
FROM
WHERE
...
END;
/

s_dept%ROWTYPE;

*
dept_record
-- PL/SQL RECORD
s_dept
id = &p_dept_id;

2-8b

Conventions de Dnomination

Utiliser une convention de dnomination afin d'viter les


ambiguits dans la clause WHERE.

Les noms des colonnes et les identifiants doivent tre


diffrents.

Des erreurs de syntaxe peuvent survenir parce que


PL/SQL vrifie d'abord la colonne d'une table dans la base
de donnes.

2-10a

Conventions de Dnomination - Exemple

Retrouver la date de commande et la date de livraison d'une


commande spcifie :
ACCEPT id PROMPT 'Numero de commande :'
-- Dbut du bloc PL -DECLARE
v_date_ordered s_ord.date_ordered%TYPE;
v_date_shipped s_ord.date_shipped%TYPE;
BEGIN
SELECT
date_ordered, date_shipped
INTO
v_date_ordered, v_date_shipped
FROM
s_ord
WHERE
id = id; -- Exception non gre
--TOO_MANY_ROWS
END;
-- Fin du bloc PL -/

2-10b

Exceptions SELECT

Les ordres SELECT en PL/SQL doivent ramener une et


une seule ligne.

Si aucune ou plusieurs lignes sont retrouves une


exception est dclenche.

Exceptions du SELECT :

TOO_MANY_ROWS

NO_DATA_FOUND

2-12

Exception TOO_MANY_ROWS - Exemple


Retrouver la commande du client numro 208.
DECLARE
v_customer_id
s_ord.customer_id%TYPE := 208;
v_ord_id
s_ord.id%TYPE;
BEGIN
-- Le client 208 a plusieurs commandes
SELECT
id
INTO
v_ord_id
FROM
s_ord
WHERE
customer_id = v_customer_id;
-- TOO_MANY_ROWS
...
END;
2-14a

Exception NO_DATA_FOUND - Exemple


Retrouver la commande du client numro 999.
DECLARE
v_customer_id
s_ord.customer_id%TYPE := 999;
v_ord_id
s_ord.id%TYPE;
BEGIN
-- Le client 999 n'existe pas
SELECT
id
INTO
v_ord_id
FROM
s_ord
WHERE
customer_id = v_customer_id;
-- NO_DATA_FOUND
...
END;
2-14b

Manipulation de Donnes

Modifier les tables de la base de donnes en utilisant les


commandes du LMD :
INSERT

UPDATE
DELETE

2-16a

Insertion de Donnes - Exemple


Ajouter une nouvelle commande la table s_ord pour un client donn :
ACCEPT p_customer_id PROMPT 'Numero de client :'
-- Dbut du bloc PL --

DECLARE
v_date_ordered
s_ord.date_ordered%TYPE := SYSDATE;
v_sales_rep_id
s_ord. sales_rep_id %TYPE := 11 ;
v_payment_type s_ord. payment_type%TYPE := 'CASH';
v_order_filled
s_ord.order_filled%TYPE := 'N';
BEGIN
INSERT INTO s_ord ( id, customer_id, date_ordered, date_shipped,
sales_rep_id, total, payment_type, order_filled )
VALUES ( s_ord_id.NEXTVAL, &p_customer_id,
v_date_ordered, NULL, v_sales_rep_id,
0, v_payment_type, v_order_filled );
END;
--Fin du bloc PL --

/
2-16b

Modification de Donnes - Exemple

Modifier la date de livraison d'une commande donne :


ACCEPT p_ord_id PROMPT 'Commande modifier :'
-- Dbut du bloc PL --

DECLARE
v_ship_date
BEGIN
UPDATE
SET
WHERE
END;

s_ord.date_shipped%TYPE := sysdate;
s_ord
date_shipped = v_ship_date
id = &p_ord_id ;

-- Fin du bloc PL --

/
2-18a

Suppression de Donnes - Exemple

Suppression d'une commande donne :


ACCEPT p_ord_id PROMPT 'Commande supprimer : '
VARIABLE g_result VARCHAR2(15)
-- Dbut du bloc PL --

BEGIN
DELETE FROM s_ord
WHERE
id = &p_ord_id ;
:g_result := 'Commande supprime : '|| '&p_ord_id';
END;
-- Fin du bloc PL --

/
PRINT g_result
2-18b

Attributs d'un Curseur SQL


Le serveur Oracle7 utilise des curseurs implicites pour
l'interprtation et l'excution des commandes SQL.

Attributs d'un curseur :

Permettent de contrler la sortie des commandes SQL.

Peuvent tre utiliss comme des fonctions en PL/SQL.

SQL%ROWCOUNT - Nombre de lignes affectes


SQL%FOUND - Indicateur boolen
SQL%NOTFOUND - Indicateur boolen
SQL%ISOPEN - Toujours FALSE
2-20a

Attributs d'un Curseur SQL - Exemple


Supprimer les lignes d'une commande donne dans la table S_ITEM.
Afficher le nombre de lignes supprimes.
ACCEPT p_ord_id PROMPT 'Numero de commande : '
VARIABLE g_result VARCHAR2(30)
-- Dbut du bloc PL -DECLARE
v_rows_del
NUMBER;
BEGIN
DELETE FROM s_item
WHERE
ord_id = &p_ord_id;
v_rows_del:= SQL%ROWCOUNT ;
:g_result := ( TO_CHAR( v_rows_del)|| ' lignes upprimes.' );
END;
-- Fin du bloc PL -/
PRINT g_result
2-20b

Commandes COMMIT et ROLLBACK

Une transaction dmarre lors de la premire commande


LMD qui suit un COMMIT ou un ROLLBACK.

Une transaction se termine en utilisant l'une des


commandes SQL : COMMIT ou ROLLBACK.

Commandes de verrouillage supplmentaires :


SELECT . . . FOR UPDATE et LOCK TABLE.

2-22

Rsum
Incorporer des commandes SQL dans un block PL/SQL :

SELECT retrouve une seule ligne.

INSERT ajoute une ligne.

UPDATE modifie une ou plusieurs lignes existantes.

DELETE supprime une ou plusieurs lignes existantes.

COMMIT rend permanentes toutes les modifications effectues


durant la transaction.

ROLLBACK limine toutes les modifications effectues durant


la transaction.

Les attributs du curseur implicite vrifient la sortie des


ordres LMD.
2-24

Prsentation de l'Exercice

Crer un bloc PL/SQL pour supprimer un enregistrement


d'une table.

Crer un bloc PL/SQL pour insrer des donnes dans une


table.

Vrifier les modifications effectues dans la table en


utilisant les attributs du curseur implicite.

2-26