Vous êtes sur la page 1sur 8

1

PL/SQL: Interaction avec la BD


2
Interaction avec la BD –
Les curseurs implicites
Code PL/SQL
 Extraction
ACCEPT des données
s_empno à partir le
PROMPT ‘Saisir de code
la BD de
et stockage dans des
l’employé’;
variables
ACCEPT s_deptno PROMPT ‘Saisir le code de département’;
SELECT select_list
DECLARE
INTO {variable_name [,variable_name,...] | record_name }
v_ename
FROM emp.ename%TYPE;
table_list
v_sal condition]
[WHERE emp.sal%TYPE;
;
dept_rec dept%ROWTYPE;
 La requête ne doit retourner qu’une seule ligne, sinon, une erreur
BEGIN
sera générée
SELECT ename,sal INTO v_ename, v_sal
FROM
Règles
emp:
- WHERE
Les colonnes sélectionnées et les identifiants doivent avoir des noms
empno=&s_empno;
différents.
SELECT * INTO dept_rec
-FROM
Le nombre
dept de variables dans la clause INTO doit être identique au nombre de
colonnes sélectionnées. Ils doivent avoir les mêmes positions.
WHERE deptno=&s_deptno;
- …Le type de données des identifiants doit correspondre à celui des colonnes.
Pour ce l’utilisation de %TYPE est recommandée
3
Interaction avec la BD – La
sélection
Code
 Si laPL/SQL
requête retourne zéro ou plusieurs lignes, alors une exception
SET SERVEROUTPUT ON
est générée.
DECLARE
 TOO_MANY_ROWS
v_sum_sal : si le curseur implicite retourne plusieurs lignes
NUMBER(10,2);

v_deptno : s’il ne
NUMBER NOT NULL
NO_DATA_FOUND := retourne
60; aucune ligne
BEGIN
SELECT SUM(sal) -- group function
INTO
Si elle n’est pas traitée (dans la section EXCEPTION), alors le
v_sum_sal
FROM emp
programme
WHERE
est interrompu.
deptno = v_deptno;
DBMS_OUTPUT.PUT_LINE ('The sum salary is ' ||TO_CHAR(v_sum_sal));
END;
/
4
Interaction avec la BD
La mise à jour – L’insertion

 L’insertion d’une ligne dans une table se produit directement, à


travers la requête INSERT
Code PL/SQL
DECLARE
v_sal NUMBER := 1000;
v_comm NUMBER := 100;
BEGIN
INSERT INTO emp(empno,ename,hiredate,job,sal,comm,mgr,deptno)
VALUES(emp_seq.NEXTVAL,'Ruth',sysdate,‘CLERK‘,v_sal,v_comm,3689,20);
END;
/
5
Interaction avec la BD
La mise à jour – La modification

 De même pour la modification, elle se produit directement, à travers


la requête UPDATE
Code PL/SQL
DECLARE
v_sal_aug emp.sal%TYPE := 250;
BEGIN
UPDATE emp
SET sal = sal + v_sal_aug
WHERE job = ‘CLERK';
END;
/
6
Interaction avec la BD
La mise à jour – La suppression

 De même pour la suppression qui se produit à travers la requête


DELETE
Code PL/SQL
DECLARE
v_deptno emp.deptno%TYPE := 10;
BEGIN
DELETE FROM emp
WHERE deptno = v_deptno;
END;
/
7
Interaction avec la BD
Les curseurs

 Un curseur est une zone mémoire dédiée à l’analyse et l’exécution


d’une requête SQL
 Il existe deux types de curseurs :
 Les curseurs implicites
 Les curseurs explicites
 Le curseur implicite est géré automatiquement par Oracle
 Le curseur explicite est déclaré et géré par le programmeur
8
Interaction avec la BD
Attributs des curseurs

 Un curseur possède plusieurs attributs qui vous permettent de


contrôler leur output :
Code PL/SQL
Attribut Commentaire
VARIABLE rows_deleted VARCHAR2(30)
SQL%ROWCOUNT
DECLARE Le nombre de lignes retrounés/affectés par la requête
SQL du curseur.
v_deptno NUMBER := 10;
BEGIN
SQL%FOUND Attribut booléen, renvoie TRUE si des lignes ont été
DELETE FROM emp affectées par la requête SQL du curseur
WHERE deptno = v_deptno;
SQL%NOTFOUND La négation de SQL%FOUND
:rows_deleted := SQL%ROWCOUNT||’employés supprimés';
SQL%ISOPEN
END; Renvoie TRUE si le curseur est ouvert. Sa Valeur est
/ toujours FALSE pour les curseurs implicites.
PRINT rows_deleted

Vous aimerez peut-être aussi