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;