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

Quelle est la différence entre les curseurs explicites et implicites dans Oracle ?

Un curseur implicite est un curseur créé "automatiquement" pour vous par Oracle lorsque vous exécutez une requête. Il est plus simple à coder, mais souffre de

  • inefficacité (la norme ANSI spécifie qu'elle doit aller chercher deux fois pour vérifier s'il y a plus d'un enregistrement)
  • vulnérabilité aux erreurs de données (si jamais vous obtenez deux lignes, cela déclenche une exception TOO_MANY_ROWS)

Exemple

SELECT col INTO var FROM table WHERE something;

Un curseur explicite est celui que vous créez vous-même. Cela prend plus de code, mais donne plus de contrôle - par exemple, vous pouvez simplement ouvrir-récupérer-fermer si vous ne voulez que le premier enregistrement et ne vous souciez pas s'il y en a d'autres.

Exemple

DECLARE   
  CURSOR cur IS SELECT col FROM table WHERE something; 
BEGIN
  OPEN cur;
  FETCH cur INTO var;
  CLOSE cur;
END;