Curseur Oracle PL / SQL: boucle implicite, explicite, curseur FOR (exemple)

Table des matières:

Anonim

Qu'est-ce que CURSOR en PL / SQL?

Un curseur est un pointeur vers cette zone de contexte. Oracle crée une zone de contexte pour traiter une instruction SQL qui contient toutes les informations sur l'instruction.

PL / SQL permet au programmeur de contrôler la zone de contexte via le curseur. Un curseur contient les lignes renvoyées par l'instruction SQL. L'ensemble de lignes que contient le curseur est appelé ensemble actif. Ces curseurs peuvent également être nommés de manière à pouvoir être référencés à partir d'un autre endroit du code.

Dans ce tutoriel, vous apprendrez-

  • Curseur implicite
  • Curseur explicite
  • Attributs du curseur
  • Instruction de curseur de boucle FOR

Le curseur est de deux types.

  • Curseur implicite
  • Curseur explicite

Curseur implicite

Chaque fois que des opérations DML se produisent dans la base de données, un curseur implicite est créé qui contient les lignes affectées, dans cette opération particulière. Ces curseurs ne peuvent pas être nommés et, par conséquent, ils ne peuvent pas être contrôlés ou référencés à partir d'un autre endroit du code. Nous ne pouvons faire référence qu'au curseur le plus récent via les attributs du curseur.

Curseur explicite

Les programmeurs sont autorisés à créer une zone de contexte nommée pour exécuter leurs opérations DML afin d'obtenir plus de contrôle sur celle-ci. Le curseur explicite doit être défini dans la section déclaration du bloc PL / SQL, et il est créé pour l'instruction 'SELECT' qui doit être utilisée dans le code.

Vous trouverez ci-dessous les étapes nécessaires à l'utilisation de curseurs explicites.

  • Déclaration du curseur

    Déclarer le curseur signifie simplement créer une zone de contexte nommée pour l'instruction 'SELECT' qui est définie dans la partie déclaration. Le nom de cette zone de contexte est identique au nom du curseur.

  • Curseur d'ouverture

    L'ouverture du curseur demandera au PL / SQL d'allouer de la mémoire pour ce curseur. Cela rendra le curseur prêt à récupérer les enregistrements.

  • Récupération des données à partir du curseur

    Dans ce processus, l'instruction 'SELECT' est exécutée et les lignes extraites sont stockées dans la mémoire allouée. Ceux-ci sont maintenant appelés ensembles actifs. La récupération des données à partir du curseur est une activité au niveau de l'enregistrement qui signifie que nous pouvons accéder aux données d'une manière enregistrement par enregistrement.

    Chaque instruction d'extraction récupère un ensemble actif et contient les informations de cet enregistrement particulier. Cette instruction est identique à l'instruction 'SELECT' qui récupère l'enregistrement et l'assigne à la variable dans la clause 'INTO', mais elle ne lèvera aucune exception.

  • Fermer le curseur

    Une fois que tout l'enregistrement est récupéré maintenant, nous devons fermer le curseur pour que la mémoire allouée à cette zone de contexte soit libérée.

Syntaxe:

DECLARECURSOR  IS ;BEGINFOR I IN LOOP… END LOOP;END;
  • Dans la syntaxe ci-dessus, la partie déclaration contient la déclaration du curseur.
  • Le curseur est créé pour l'instruction 'SELECT' qui est donnée dans la déclaration du curseur.
  • Dans la partie exécution, le curseur déclaré est configuré dans la boucle FOR et la variable de boucle 'I' se comportera comme une variable de curseur dans ce cas.

Exemple 1 : Dans cet exemple, nous projetterons tous les noms d'employés de la table emp en utilisant une boucle curseur-FOR.

DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;BEGINFOR lv_emp_name IN guru99_detLOOPDbms_output.put_line(‘Employee Fetched:‘||lv_emp_name.emp_name);END LOOP;END;/

Production

Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY

Explication du code:

  • Ligne de code 2 : Déclaration du curseur guru99_det pour l'instruction 'SELECT emp_name FROM emp'.
  • Ligne de code 4 : Construction de la boucle 'FOR' pour le curseur avec la variable de boucle lv_emp_name.
  • Ligne de code 5: impression du nom de l'employé à chaque itération de la boucle.
  • Ligne de code 8: quitter la boucle

Remarque: Dans la boucle Cursor-FOR, les attributs de curseur ne peuvent pas être utilisés car l'ouverture, l'extraction et la fermeture du curseur sont effectuées implicitement par la boucle FOR.