Dddddddddddddd
Zone de mémoire de taille fixe, utilisée par le noyau d'Oracle pour analyser et interpréter tout ordre SQL. Les statuts d'exécution de l'ordre se trouvent dans le curseur. • curseur implicite : créé et géré par Oracle à chaque ordre SQL • curseur explicite : créé et géré par l'utilisateur afin de pouvoir traiter un SELECT qui retourne plusieurs lignes
Curseur explicite
L'utilisation d'un curseur explicite nécessite 4 étapes : 1. 2. 3. 4. déclaration du curseur ouverture du curseur traitement des lignes fermeture du curseur
Déclaration d'un curseur
Dans la section DECLARE du bloc avec la syntaxe : CURSOR nom_curseur IS instruction_select ; Exemple : DECLARE CURSOR dpt IS SELECT ename, sal from emp where dptno = 10 ; BEGIN … END ;
Ouverture d'un curseur
Après avoir déclaré le curseur, il faut l'ouvrir dans la section exécutable (BEGIN) afin de faire exécuter l'ordre SELECT : OPEN nom_curseur ; Conséquences : • allocation mémoire du curseur • analyse de l'instruction SELECT • positionnement des verrous éventuels (si SELECT … FOR UPDATE)
Traitement des lignes
Après l'exécution du SELECT, les lignes ramenées sont traitées une par une, la valeur de chaque colonne du SELECT doit être stockée dans une variable réceptrice. FETCH nom_curseur INTO liste_variables ; FETCH ramène une seule ligne ; pour traiter n lignes, prévoir une boucle
Fermeture du curseur
Après le traitement des lignes, pour libérer la place mémoire. CLOSE nom_curseur ;
DECLARE CURSOR dpt_10 IS SELECT ename, sal FROM emp WHERE deptno=10 order by sal ; nom emp.ename%TYPE ; salaire emp.sal%TYPE ; BEGIN OPEN dpt_10 ; LOOP FETCH dept_10 INTO nom, salaire ; IF salaire > 2500 THEN insert into resultat values (nom, salaire) ; END IF; EXIT WHEN salaire = 5000 ; END LOOP ; CLOSE dpt_10 ; END;
Attributs d'un curseur indicateurs sur l'état d'un curseur : %FOUND %NOTFOUND %ISOPEN %ROWCOUNT booléen booléen booléen donnée numérique
• curseur implicite : SQL%… • curseur