Oracle
 sql >> Base de données >  >> RDS >> Oracle

Qu'est-ce qu'un curseur dans Oracle

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

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

É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