Curseur nommé

La clause facultative AS CURSOR crée un curseur nommé qui peut être référencé (en utilisant la clause WHERE CURRENT OF) dans l'instruction composée qui suit la clause DO afin de supprimer ou de modifier la ligne courante.

Il est permis d'utiliser le nom du curseur comme une variable de type enregistrement (similaire à OLD et NEW dans les triggers) qui permet d'accéder aux colonnes du jeu résultant (i.e. cursor_name . columnname). L'utilisation de la clause AS CURSOR rend la clause INTO facultative.

Règles pour les variables de curseur :
  • Pour résoudre l'ambiguïté lors de l'accès à une variable curseur, un préfixe deux-points est requis avant le nom du curseur ;

  • La variable curseur peut être accédée sans le préfixe deux-points, mais dans ce cas, selon la portée des contextes existants dans la requête, le nom peut être résolu comme un contexte de requête au lieu du curseur ;

  • Les variables du curseur sont en lecture seule ;

  • Dans une instruction FOR SELECT sans la clause AS CURSOR, la clause INTO doit être utilisée. Si la clause AS CURSOR est spécifiée, la clause INTO n'est pas requise mais autorisée ;

  • La lecture d'une variable curseur renvoie les valeurs actuelles des champs. Cela signifie que l'Instruction UPDATE (avec la clause WHERE CURRENT OF) mettra également à jour les valeurs des champs dans la variable curseur pour les lectures suivantes. L'exécution de l'instruction DELETE (avec la suggestion WHERE CURRENT OF) mettra NULL pour les valeurs des champs de la variable curseur pour les lectures suivantes.

Note
  • Les Instructions OPEN, FETCH et CLOSE ne peuvent pas être exécutés sur un curseur déclaré avec une clause AS CURSOR ;

  • Assurez-vous que le nom du curseur défini ici n'est pas le même qu'un nom précédemment créé par l'instruction DECLARE VARIABLE ;

  • La clause FOR UPDATE autorisée à être utilisée dans l'instruction SELECT n'est pas nécessaire pour une mise à jour ou une suppression positionnelle réussie.