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