Qu'est-ce que le curseur dans Oracle
Oracle utilise une zone de travail appelée zones SQL privées pour exécuter des instructions SQL et stocker des informations. Un curseur Oracle est une construction PL/SQL qui vous permet de nommer ces zones de travail et d'accéder à leurs informations stockées
Types de curseur dans Oracle
- Curseur implicite dans Oracle
- Curseur explicite dans Oracle
![](http://www.sqldat.com/article/uploadfiles/202205/2022051016162802.png)
Curseurs explicites
Les curseurs explicites ont les étapes suivantes
1) Déclarer :Nous déclarons le nom du curseur et définissons la structure de la requête
2) Open : L'instruction open exécute la requête et lie toute variable référencée. Les lignes identifiées par la requête sont appelées ensembles actifs. Et maintenant, cela est disponible pour la récupération
Qu'est-ce que l'ensemble actif : L'Ensemble de lignes renvoyé par une requête à plusieurs lignes
Sa taille correspond au nombre de lignes correspondant à vos critères de recherche
3) Extraction :dans cette étape, les lignes sont extraites du curseur, et après chaque extraction, vous testez le curseur pour toutes les lignes restantes, s'il n'y a pas de lignes, vous continuez à fermer le curseur
4) Fermer :l'instruction de fermeture libère l'ensemble actif de lignes et nous pouvons à nouveau ouvrir le curseur pour récupérer l'ensemble actif d'actualisation
![](http://www.sqldat.com/article/uploadfiles/202205/2022051016162964.png)
Étapes en détails
Déclarer un curseur
- Nom du curseur
- Structure de la requête
Syntax: CURSOR IS : It includes most of the usual clauses, but INTO Clause is not allowed Example: DECLARE CURSOR cur1 is SELECT address,salary,emp_no,emp_name FROM emp WHERE region=’US’; ……………………………… BEGIN ……………………………… END;
Ouvrir un curseur
Ici, l'exécution de l'analyse et de la requête est terminée. Après l'ouverture du curseur, les lignes renvoyées par la requête sont disponibles pour la récupération.
Syntax: Open <cursor name> This statement is used within the executable section of the block. It also establishes an active set of the rows Example: OPEN cur1; DECLARE v_salary number; CURSOR cur1 is SELECT salary FROM emp WHERE region=’US’; BEGIN OPEN cur1; LOOP FETCH cur1 into v_salary; EXIT WHEN cur1%NOTFOUND; DBMS_OUTPUT.PUT_LINE (v_salary); END LOOP; CLOSE cur1; END; /
Le curseur pointera maintenant sur la première ligne de l'ensemble actif.
Récupération des lignes
Une fois le curseur ouvert, la ligne actuelle est chargée dans des variables. La ligne courante est la ligne sur laquelle pointe actuellement le curseur La récupération des données dans une variable ou un hôte PL/SQL
La variable se fait via l'instruction FETCH
Syntax: FETCH INTO ;
- Pour chaque valeur de colonne renvoyée par la requête associée au curseur, il doit y avoir un
variable correspondante dans la liste INTO.
- ÉGALEMENT, leurs types de données doivent être compatibles
FERMER UN CURSEUR
Il ferme explicitement le curseur, lui permettant d'être rouvert, si nécessaire.
Syntax: CLOSE <cursor-name>; Example: CLOSE cur1 Example of Using CLOSE <Cursor Name> DECLARE v_address emp.address%TYPE; CURSOR cur1 is select address from emp; BEGIN OPEN cur1; LOOP FETCH cur1 into v_address; EXIT WHEN cur1%NOTFOUND; DBMS_OUTPUT.PUT_LINE(v_address); END LOOP; CLOSE cur1; END; /
Attributs de curseur explicites
Attribut | Type | Description |
%ISOPEN | Booléen | Évalue à TRUE si le curseur est ouvert |
%NOTFOUND | Booléen | Évalue à TRUE si la récupération la plus récente ne renvoie pas de ligne |
%TROUVE | Booléen | Évalue à VRAI si la récupération la plus récente renvoie une ligne |
%ROWCOUNT | NOMBRE | Évalue le nombre total de lignes renvoyées jusqu'à présent |
Concept avancé avec le curseur Oracle
Curseur et enregistrements Oracle
1)Nous avons déjà lu des informations sur les enregistrements PLSQL.
2) Nous pouvons également traiter les lignes de l'ensemble actif en récupérant les valeurs dans un enregistrement PL/SQL
3) Nous pouvons également définir un enregistrement plsql basé sur la liste sélectionnée des colonnes dans les curseurs explicites également
Exemple
DECLARE CURSOR dept_cursor is Select deptno,dept_name FROM dept; dept_record dept_cursor%rowtype; BEGIN OPEN dept_cursor; LOOP FETCH dept_cursor INTO dept_record; Insert into dept_temp (deptno, deptname) values (dept_record.deptno, dept_record.dept_name); EXIT WHEN dept_cursor%notfound; END LOOP; Commit; CLOSE dept_cursor; END; /
Curseur avec paramètres/curseur paramétré dans oracle
Syntax: CURSOR cursor_name(parameter_name datatype, ) IS Select_statement;
1)Passer les valeurs des paramètres à un curseur lorsque le curseur est ouvert et que la requête est exécutée
2) Ouvrir plusieurs fois un curseur explicite avec des ensembles actifs différents à chaque fois
Open cursor_name(parameter_value , ……);
Exemple
DECLARE CURSOR cur1(v_deptno number) is Select deptname,dept_loc,dept_pincode from dept where deptno=v_deptno; Dept_record cur1%rowtype; l_deptno number:=111; BEGIN OPEN cur1(112); LOOP FETCH cur1 into dept_record; IF cur1%FOUND THEN Dbms_output.put_line(dept_record.deptname); ELSE Exit; END IF; END LOOP; CLOSE cur1; OPEN cur1(l_deptno); LOOP FETCH cur1 into dept_record; IF cur1%FOUND THEN Dbms_output.put_line(dept_record.deptname); ELSE Exit; END IF; END LOOP; CLOSE cur1; END; /
Articles connexes
Comment travailler avec la date dans Oracle sql
Tableaux Oracle PLSQL
Tout sur les enregistrements Oracle PLSQL
Les 25 questions d'entretien oracle plsql les plus fréquemment posées
Structure de bloc Oracle PLSQL et variable Oracle PLSQL
/>Attributs du curseur