Vous êtes sur la page 1sur 7

MANIPULATION DES DONNEES EN PL / SQL

- Construire et exécuter des instructions PL / SQL qui manipulent des


données avec des instructions DML
 INSERTION
Syntaxe
DECLARE
--
BEGIN
INSERT into NomTable(col1, col2, col3…)
VALUES (val1, val2, val3…) ;
END ;
/
 EXEMPLE
declare
begin
insert into dept
values(50,'INFO','DKR');
end;
 MODIFICATION
Syntaxe
Declare
Begin
Update NomTable
Set Col1=val1,
Col2=Val2,
Col3=Val3
Where (Prédicat) ;
END ;

1
 EXEMPLE
Declare
Begin
Update DEPT
Set dname=’MATHS’,
loc=’Dakar’
Where deptno=50;
END ;

 SUPPRESSION
Syntaxe
Declare
Begin
Delete From NomTable
Where (Prédicat) ;
End ;

 EXEMPLE
Declare
Begin
Delete From Dept
Where deptno=50;
End ;

 CURSEURS

- Quand utiliser des curseurs implicites ou explicites en PL / SQL


- Oracle crée une zone de mémoire, appelée zone de contexte, pour le
traitement d'une instruction SQL, qui contient toutes les informations
nécessaires à son traitement. par exemple, le nombre de lignes traitées, etc.

2
Un curseur est un pointeur sur cette zone de contexte. PL / SQL contrôle la zone
de contexte via un curseur. Un curseur contient les lignes (une ou plusieurs)
renvoyées par une instruction SQL. L'ensemble de lignes détenues par le curseur
est appelé ensemble actif.

Il existe deux types de curseurs

 Curseurs implicites
 Curseurs explicites

Curseurs implicites
Les curseurs implicites sont automatiquement créés par Oracle chaque fois
qu'une instruction SQL est exécutée, lorsqu'il n'existe pas de curseur explicite
pour cette instruction. Les programmeurs ne peuvent pas contrôler les curseurs
implicites et les informations qu’ils contiennent.

Chaque fois qu'une instruction DML (INSERT, UPDATE et DELETE) est


émise, un curseur implicite est associé à cette instruction. Pour les opérations
INSERT, le curseur contient les données à insérer. Pour les opérations UPDATE
et DELETE, le curseur identifie les lignes qui seraient affectées.

En PL / SQL, vous pouvez faire référence au dernier curseur implicite en tant que
curseur SQL, qui possède toujours des attributs tels
que %FOUND,%ISOPEN,% NOTFOUND et %ROWCOUNT.

S.No Attribut et description

%FOUND
1 Renvoie VRAI si une instruction INSERT, UPDATE ou DELETE affecte une ou
plusieurs lignes ou si une instruction SELECT INTO renvoie une ou plusieurs
lignes. Sinon, il retourne FALSE.

3
%NOT FOUND

2 L'opposé logique de %FOUND. Il renvoie VRAI si une instruction INSERT,


UPDATE ou DELETE n'affecte aucune ligne, ou si une instruction SELECT INTO
ne renvoie aucune ligne. Sinon, il retourne FALSE.

%ISOPEN
3
Renvoie toujours FALSE pour les curseurs implicites, car Oracle ferme
automatiquement le curseur SQL après l'exécution de l'instruction SQL associée.

% ROWCOUNT
4
Renvoie le nombre de lignes affectées par une instruction INSERT, UPDATE ou
DELETE ou renvoyées par une instruction SELECT INTO.

Tout attribut de curseur SQL sera accédé en tant


que sql%nom_attribut, comme indiqué ci-dessous dans l'exemple.
Exemple
Nous utiliserons la table DEPT du schéma d’un utilisateur donné.
SELECT * FROM DEPT;
DEPTNO DNAME LOC

10 ACCOUNTING NEW YORK


20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

Le programme suivant mettra à jour la table et changera la localité NEW YORK


à DAKAR et utilisera l'attribut SQL% ROWCOUNT pour déterminer le
nombre de lignes affectées

4
DECLARE
total_rows number(2);
BEGIN
UPDATE DEPT
SET LOC = 'DAKAR'
WHERE DEPTNO=10;
IF sql%notfound THEN
dbms_output.put_line('no DEPT selected');
ELSIF sql%found THEN
total_rows := sql%rowcount;
dbms_output.put_line( total_rows || ' DEPT selected ');
END IF;
END;
/
Résultat
1 DEPT selected

1 row(s) updated.

0.06 seconds

Curseurs explicites
Les curseurs explicites sont des curseurs définis par le programmeur permettant
de mieux contrôler la zone de contexte. Un curseur explicite doit être défini dans
la section déclaration du bloc PL / SQL. Il est créé sur une instruction SELECT
qui renvoie plusieurs lignes.

La syntaxe pour créer un curseur explicite est :


CURSOR Nom_cursor IS instruction_SELECT;

5
Travailler avec un curseur explicite comprend les étapes suivantes:

 Déclarer le curseur pour initialiser la mémoire


 Ouvrir le curseur pour allouer la mémoire
 Récupérer le curseur pour récupérer les données
 Fermer le curseur pour libérer la mémoire allouée

Déclarer le curseur
La déclaration du curseur définit le curseur avec un nom et l’instruction
SELECT associée.

Par exemple :

CURSOR c_dept IS
SELECT deptno, dname, loc FROM dept;

Ouvrir le curseur
L'ouverture du curseur alloue la mémoire au curseur et le prépare à extraire les
lignes renvoyées par l'instruction SQL. Par exemple, nous allons ouvrir le
curseur défini ci-dessus comme suit :

OPEN c_dept;

Aller chercher le curseur


Pour récupérer le curseur, vous devez accéder à une ligne à la fois. Par exemple,
nous allons récupérer les lignes du curseur ouvert ci-dessus comme suit :

FETCH c_dept INTO v_deptno, v_dname, v_loc;

6
Fermer le curseur
Fermer le curseur signifie libérer la mémoire allouée. Par exemple, nous allons
fermer le curseur ouvert ci-dessus comme suit :

CLOSE c_dept;

DECLARE
v_deptno dept.deptno%type;
v_dname dept.dname%type;
v_loc dept.loc%type;
CURSOR c_dept is
SELECT deptno, dname, loc FROM dept;
BEGIN
OPEN c_dept;
LOOP
FETCH c_dept into v_deptno, v_dname, v_loc;
EXIT WHEN c_dept%notfound;
dbms_output.put_line(v_deptno || ' ' || v_dname || ' ' || v_loc);
END LOOP;
CLOSE c_dept;

Vous aimerez peut-être aussi