Curseur explicite vs curseur implicite
En ce qui concerne les bases de données, un curseur est une structure de contrôle qui permet de parcourir les enregistrements d'une base de données. Un curseur fournit un mécanisme pour attribuer un nom à une instruction de sélection SQL, puis il peut être utilisé pour manipuler les informations contenues dans cette instruction SQL. Des curseurs implicites sont automatiquement créés et utilisés chaque fois qu'une instruction Select est émise en PL/SQL, lorsqu'il n'y a pas de curseur explicitement défini. Les curseurs explicites, comme leur nom l'indique, sont définis explicitement par le développeur. En PL/SQL, un curseur explicite est en fait une requête nommée définie à l'aide du mot clé curseur.
Qu'est-ce qu'un curseur implicite ?
Les curseurs implicites sont automatiquement créés et utilisés par Oracle chaque fois qu'une instruction select est émise. Si un curseur implicite est utilisé, le système de gestion de base de données (SGBD) effectuera automatiquement les opérations d'ouverture, de récupération et de fermeture. Les curseurs implicites ne doivent être utilisés qu'avec des instructions SQL qui renvoient une seule ligne. Si l'instruction SQL renvoie plusieurs lignes, l'utilisation d'un curseur implicite introduira une erreur. Un curseur implicite est automatiquement associé à chaque instruction DML (Data Manipulation Language), à savoir les instructions INSERT, UPDATE et DELETE. De plus, un curseur implicite est utilisé pour traiter les instructions SELECT INTO. Lors de la récupération de données à l'aide de curseurs implicites, l'exception NO_DATA_FOUND peut être déclenchée lorsque l'instruction SQL ne renvoie aucune donnée. De plus, les curseurs implicites peuvent déclencher des exceptions TOO_MANY_ROWS lorsque l'instruction SQL renvoie plusieurs lignes.
Qu'est-ce qu'un curseur explicite ?
Comme mentionné précédemment, les curseurs explicites sont des requêtes définies à l'aide d'un nom. Un curseur explicite peut être considéré comme un pointeur vers un ensemble d'enregistrements et le pointeur peut être déplacé vers l'avant dans l'ensemble d'enregistrements. Les curseurs explicites offrent à l'utilisateur le contrôle complet sur l'ouverture, la fermeture et la récupération des données. De plus, plusieurs lignes peuvent être extraites à l'aide d'un curseur explicite. Les curseurs explicites peuvent également prendre des paramètres comme n'importe quelle fonction ou procédure afin que les variables du curseur puissent être modifiées à chaque exécution. De plus, les curseurs explicites vous permettent d'extraire une ligne entière dans une variable d'enregistrement PL/SQL. Lors de l'utilisation d'un curseur explicite, il doit d'abord être déclaré à l'aide d'un nom. Les attributs du curseur sont accessibles en utilisant le nom donné au curseur. Après la déclaration, le curseur doit d'abord être ouvert. Ensuite, la récupération peut être lancée. Si plusieurs lignes doivent être extraites, l'opération d'extraction doit être effectuée dans une boucle. Enfin, le curseur doit être fermé.
Différence entre le curseur explicite et le curseur implicite
La principale différence entre le curseur implicite et le curseur explicite est qu'un curseur explicite doit être défini explicitement en fournissant un nom tandis que les curseurs implicites sont automatiquement créés lorsque vous émettez une instruction select. De plus, plusieurs lignes peuvent être extraites à l'aide de curseurs explicites, tandis que les curseurs implicites ne peuvent extraire qu'une seule ligne. De plus, les exceptions NO_DATA_FOUND et TOO_MANY_ROWS ne sont pas déclenchées lors de l'utilisation de curseurs explicites, contrairement aux curseurs implicites. Essentiellement, les curseurs implicites sont plus vulnérables aux erreurs de données et fournissent moins de contrôle par programmation que les curseurs explicites. De plus, les curseurs implicites sont considérés comme moins efficaces que les curseurs explicites.