CODE RETOUR -248

A POSITIONED DELETE OR UPDATE STATEMENT FOR CURSOR cursor-name SPECIFIED ROW n OF A ROWSET, BUT THE ROW IS NOT CONTAINED WITHIN THE CURRENT ROWSET

Explication :
La clause FOR ROW n OF ROWSET a été spécifiée sur une instruction DELETE ou UPDATE positionnée, mais la ligne n n’est pas contenue dans la limite de l’ensemble de lignes. Cette situation peut également se produire lorsque la ligne n se trouve dans les limites de l’ensemble de lignes demandé, mais que l’ensemble de lignes actuel contient moins que le nombre de lignes demandé. Dans ce cas, un ensemble de lignes partiel est renvoyé. Un ensemble de lignes partiel peut se produire pour diverses raisons, notamment une condition de fin de données ou une erreur qui n’a pas entraîné la fermeture du curseur.

Action du système :
L’instruction ne peut pas être traitée.

Réponse du programmeur :
Réexécutez le UPDATE ou DELETE positionné avec une valeur qui correspond à une ligne de l’ensemble de lignes actuel. Si la ligne spécifiée est en dehors de l’ensemble de lignes actuel, procédez comme suit :

  • Utilisez la clause FOR n ROWS sur une instruction FETCH CURRENT ROWSET pour spécifier que l’ensemble de lignes contient un plus grand nombre de lignes
  • Relancez l’instruction UPDATE ou DELETE positionnée.

Si ce message est émis parce qu’un ensemble de lignes partiel a été renvoyé,

  • Mettez à jour la logique de l’application pour détecter que la taille réelle de l’ensemble de lignes était inférieure à la taille de l’ensemble de lignes demandée
  • Assurez-vous qu’une instruction UPDATE ou DELETE positionnée ne fait référence qu’aux lignes de l’ensemble de lignes actuel.

ETATSQL :
24521