PL / SQL – Curseurs
Dans ce chapitre, nous aborderons les curseurs en PL / SQL. Oracle crée une zone de mémoire, appelée zone de contexte, pour traiter une instruction SQL, qui contient toutes les informations nécessaires au traitement de l’instruction; par exemple, le nombre de lignes traitées, etc.
Un curseur est un pointeur vers cette zone de contexte. PL / SQL contrôle la zone de contexte via un curseur. Un curseur contient les lignes (une ou plusieurs) renvoyées par une instruction SQL. L’ensemble de lignes que contient le curseur est appelé l’ensemble actif.
Vous pouvez nommer un curseur afin qu’il puisse être référencé dans un programme pour extraire et traiter les lignes renvoyées par l’instruction SQL, un à la fois. Il existe deux types de curseurs –
- Curseurs implicites
- Curseurs explicites
Curseurs implicites
Curseurs implicites sont automatiquement créés par Oracle chaque fois qu’une instruction SQL est exécutée, lorsqu’il n’y a pas de curseur explicite pour l’instruction. Les programmeurs ne peuvent pas contrôler les curseurs implicites et les informations qu’ils contiennent.
Chaque fois qu’une instruction DML (INSERT, UPDATE et DELETE) est émise, un curseur implicite est associé à cette instruction. Pour les opérations INSERT, le curseur contient les données qui doivent être insérées. Pour les opérations UPDATE et DELETE, le curseur identifie les lignes qui seraient affectées.
En PL / SQL, vous pouvez faire référence au curseur implicite le plus récent comme le curseur SQL, qui a toujours des attributs tels que% FOUND ,% ISOPEN,% NOTFOUND et% ROWCOUNT. Le curseur SQL a des attributs supplémentaires,% BULK_ROWCOUNT et% BULK_EXCEPTIONS, conçus pour être utilisés avec l’instruction FORALL. Le tableau suivant fournit la description des attributs les plus utilisés –
S.Non | Attribut & Description |
---|---|
1 |
% FOUND Renvoie TRUE si une instruction INSERT, UPDATE ou DELETE affectait une ou plusieurs lignes ou si une instruction SELECT INTO renvoyait une ou plusieurs lignes. Sinon, il renvoie FALSE. |
2 |
% NOTFOUND L’opposé logique de% FOUND. Elle renvoie TRUE si une instruction INSERT, UPDATE ou DELETE n’affecte aucune ligne ou si une instruction SELECT INTO ne renvoie aucune ligne. Sinon, il renvoie FALSE. |
3 |
% ISOPEN Renvoie toujours FALSE pour les curseurs implicites, car Oracle ferme automatiquement le curseur SQL après avoir exécuté l’instruction SQL associée. |
4 |
% ROWCOUNT Renvoie le nombre de lignes affectées par une instruction INSERT, UPDATE ou DELETE, ou renvoyées par une instruction SELECT INTO. |
Tout attribut de curseur SQL sera accessible en tant que sql% attribute_name comme indiqué ci-dessous dans l’exemple.
Exemple
Nous utiliserons la table CUSTOMERS que nous avons créée et utilisée dans les chapitres précédents.
Le programme suivant mettra à jour la table et augmentera le salaire de chaque client de 500 et utilisera le SQL% Attribut ROWCOUNT pour déterminer le nombre de lignes affectées –
Lorsque le code ci-dessus est exécuté à l’invite SQL, il produit le résultat suivant –
6 customers selected PL/SQL procedure successfully completed.
Si vous vérifiez les enregistrements dans la table des clients, vous constaterez que les lignes ont été mises à jour –
Curseurs explicites
Les curseurs explicites sont des curseurs définis par le programmeur pour obtenir plus de contrôle sur la zone de contexte. Un curseur explicite doit être défini dans la section déclaration du bloc PL / SQL. Il est créé sur une instruction SELECT qui renvoie plus d’une ligne.
La syntaxe pour créer un curseur explicite est –
CURSOR cursor_name IS select_statement;
Fonctionnant avec un curseur explicite comprend les étapes suivantes –
- Déclaration du curseur pour l’initialisation de la mémoire
- Ouverture du curseur pour l’allocation de la mémoire
- Récupération du curseur pour récupérer les données
- Fermer le curseur pour libérer la mémoire allouée
Déclarer le curseur
Déclarer le curseur définit le curseur avec un nom et l’instruction SELECT associée. Par exemple –
CURSOR c_customers IS SELECT id, name, address FROM customers;
Ouverture du curseur
L’ouverture du curseur alloue la mémoire pour le curseur et le prépare à récupérer les lignes renvoyées par l’instruction SQL dedans. Par exemple, nous allons ouvrir le curseur défini ci-dessus comme suit –
OPEN c_customers;
Récupérer le curseur
Récupérer le curseur implique d’accéder à une ligne à un temps. Par exemple, nous allons récupérer les lignes du curseur ouvert ci-dessus comme suit –
FETCH c_customers INTO c_id, c_name, c_addr;
Fermer le curseur
Fermer le curseur signifie relâcher la mémoire allouée.Par exemple, nous fermerons le curseur ouvert ci-dessus comme suit –
CLOSE c_customers;
Exemple
Voici un exemple complet pour illustrer les concepts de curseurs explicites & minua;
Lorsque le code ci-dessus est exécuté à l’invite SQL, il produit le résultat suivant –
1 Ramesh Ahmedabad 2 Khilan Delhi 3 kaushik Kota 4 Chaitali Mumbai 5 Hardik Bhopal 6 Komal MP PL/SQL procedure successfully completed.