Archives de catégorie : SQLCODE

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

CODE RETOUR -247

A HOLE WAS DETECTED ON A MULTIPLE ROW FETCH STATEMENT USING CURSOR cursor-name, BUT INDICATOR VARIABLES WERE NOT PROVIDED TO DETECT THE CONDITION

Explication :
Un trou a été détecté sur une instruction FETCH pour plusieurs lignes de données, mais aucune variable indicatrice n’a été fournie pour refléter la situation dans l’application.

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

Réponse du programmeur :
Modifiez l’instruction FETCH pour fournir au moins une variable d’indicateur et soumettez à nouveau l’instruction.

ETATSQL :
24519

CODE RETOUR -246

STATEMENT USING CURSOR cursor-name SPECIFIED NUMBER OF ROWS num-rows WHICH IS NOT VALID WITH dimension

Explication :
Une instruction FETCH, MERGE ou INSERT à plusieurs lignes n’est pas valide dans ce contexte. La déclaration est invalide pour l’une des raisons suivantes :

  • Le nombre de lignes spécifié n’est pas supérieur à 0 ni inférieur ou égal à 32767.
  • Le nombre de lignes spécifié est supérieur à la dimension du tableau de variable hôte.
  • Si l’instruction est une instruction FETCH à plusieurs lignes exécutée dans un environnement distribué ou sur un accélérateur, la taille maximale calculée des données de réponse dépasse la limite Db2. La taille maximale calculée des données de réponse est le produit du nombre de lignes et de la taille maximale des données renvoyées dans une seule ligne de la requête.

cursor-name
Si l’instruction SQL est une instruction FETCH, cette valeur est le nom du curseur qui a été utilisé pour l’instruction FETCH. Si l’instruction SQL n’est pas une instruction FETCH, cette valeur est la chaîne *N. *N indique que le nom du curseur n’est pas applicable.

num-rows
Le nombre de lignes qui ont été spécifiées.

dimension
Si l’instruction n’est pas une instruction FETCH à plusieurs lignes exécutée dans un environnement distribué et qu’il ne s’agit pas d’une instruction FETCH à plusieurs lignes exécutée sur un accélérateur, cette valeur correspond à la dimension du tableau.
Si l’instruction est une instruction FETCH à plusieurs lignes exécutée dans un environnement distribué ou une instruction FETCH à plusieurs lignes exécutée sur un accélérateur, cette valeur est la chaîne *N. *N indique que la dimension n’est pas applicable.

Action du système :
L’instruction ne peut pas être traitée. La position du curseur est inchangée.

Réponse du programmeur :
Effectuez l’une des actions suivantes :

  • Modifiez l’application pour déclarer ou allouer un tableau de variables hôte suffisamment grand pour contenir le nombre de lignes spécifié.
  • Modifiez le nombre de lignes spécifié entre 1 et 32767 inclus.
  • Si l’instruction est une instruction FETCH à plusieurs lignes exécutée dans un environnement distribué ou sur un accélérateur, réduisez le nombre de lignes spécifié.

ETATSQL :
42873

CODE RETOUR -245

THE INVOCATION OF FUNCTION routine-name IS AMBIGUOUS

Explication :
Db2 n’a pas pu résoudre la fonction indiquée.

routine-name
Le nom de la fonction.

Cette situation peut se produire dans les circonstances suivantes :

  • Un marqueur de paramètre non typé est transmis à une fonction et il existe deux fonctions candidates ou plus à résoudre pendant la résolution de la fonction.
  • Db2 ne peut pas déterminer comment convertir implicitement les arguments entre les types de données chaîne et numérique.
  • Db2 ne parvient pas à résoudre un appel de fonction à l’aide du processus promouvable ou du processus castable de résolution de fonction.

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

Réponse du programmeur :
Corrigez le problème et rééditez la déclaration. Vous devrez peut-être modifier l’instruction SQL, la définition d’une fonction ou le chemin SQL de l’utilisateur.

ETATSQL :
428F5

CODE RETOUR -244

SENSITIVITY sensitivity SPECIFIED ON THE FETCH IS NOT VALID FOR CURSOR cursor-name

Explication :
L’option de sensibilité spécifiée sur FETCH entre en conflit avec l’option de sensibilité en vigueur pour le curseur cursor-name. Si un curseur est déclaré INSENSITIVE, l’instruction FETCH ne peut spécifier que INSENSITIVE ou rien. Si un curseur est déclaré SENSITIVE, l’instruction FETCH peut spécifier INSENSITIVE, SENSITIVE ou rien.

Le mot clé INSENSITIVE n’est pas autorisé avec les instructions FETCH si le curseur associé est soit :

  • Déclaré comme SENSITIVE DYNAMIC SCROLL, ou
  • Le curseur est déclaré ASENSITIVE et Db2 a sélectionné la sensibilité maximale autorisée de SENSITIVE DYNAMIC SCROLL pour l’instruction SELECT associée.

Dans le cas d’un curseur non défilant, l’option de sensibilité ne peut pas être spécifiée.

sensitivity
Sensibilité spécifiée pour l’instruction FETCH.
cursor-name
Nom du curseur utilisé pour l’instruction FETCH.

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

Réponse du programmeur :
Modifiez ou supprimez l’option de sensibilité spécifiée sur le FETCH.

ETATSQL :
428F4

CODE RETOUR -243

SENSITIVE CURSOR cursor-name CANNOT BE DEFINED FOR THE SPECIFIED SELECT STATEMENT

Explication :
Une clause n’était pas valide pour l’une des raisons suivantes :

  • Le curseur, cursor-name, est défini comme SENSITIVE, mais le contenu de l’instruction SELECT rend le curseur en lecture seule. Dans la plupart des cas, l’instruction SELECT nécessite que Db2 crée une table temporaire ou un fichier de travail avec la table de résultats du curseur, et Db2 ne peut garantir que les modifications apportées en dehors du curseur seront visibles. Dans ce cas, le curseur doit être défini INSENSITIVE ou ASENSITIVE.
  • Le curseur, cursor-name, est défini comme SENSITIVE DYNAMIC et une clause OFFSET ou FETCH a été spécifiée pour la sous-sélection ou la sélection complète la plus externe.

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

Réponse du programmeur :
Si le curseur est défini comme SENSITIVE, mais que le contenu de l’instruction SELECT rend le curseur en lecture seule, modifiez le contenu de la requête pour obtenir une table de résultats qui n’est pas en lecture seule ou modifiez le type de curseur à INSENSIBLE ou ASENSIBLE.

Si le curseur est défini comme SENSITIVE DYNAMIC et qu’une clause OFFSET ou FETCH a été spécifiée pour la sous-sélection ou la sélection complète la plus à l’extérieur, modifiez la sensibilité du curseur ou modifiez la sous-sélection ou la sélection complète la plus extérieure pour supprimer la clause OFFSET ou la clause FETCH.

ETATSQL :
36001

CODE RETOUR -242

THE OBJECT NAMED object-name OF TYPE object-type WAS SPECIFIED MORE THAN ONCE IN THE LIST OF OBJECTS, OR THE NAME IS THE SAME AS AN EXISTING OBJECT

Explication :
Dans une liste de noms d’objets de type object-type, l’objet nommé object-name a été spécifié plusieurs fois ou est le même qu’un nom existant de ce type.

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

Réponse de l’utilisateur :
Corrigez l’erreur en supprimant toutes les occurrences en double de l’objet de la liste.

ETATSQL :
42713

CODE RETOUR -240

THE PARTITION CLAUSE OF A LOCK TABLE STATEMENT IS INVALID

Explication :
L’instruction LOCK TABLE n’est pas valide pour l’une des raisons suivantes :

  • S’il est partitionné, spécifiez une clause PARTITION qui identifie la partition que vous souhaitez verrouiller.

Action du système :
L’instruction LOCK TABLE ne peut pas être exécutée.

Réponse du programmeur :
Déterminez si la table spécifiée réside dans un espace table partitionné défini avec LOCKPART YES.

  • S’il est partitionné et défini avec LOCKPART YES, spécifiez une clause PART qui identifie la partition que vous souhaitez verrouiller.
  • S’il est partitionné mais n’a pas l’attribut LOCKPART YES et que vous souhaitez verrouiller une seule partition, utilisez ALTER TABLESPACE pour remplacer l’attribut LOCKPART par YES.
  • S’il n’est pas partitionné, ne spécifiez pas la clause PART.

ETATSQL :
428B4

CODE RETOUR -229

THE LOCALE locale SPECIFIED IN A SET LC_CTYPE OR OTHER STATEMENT THAT IS LOCALE SENSITIVE WAS NOT FOUND

Explication :
L’instruction a tenté de référencer un paramètre régional inconnu ou non disponible pour Db2. La valeur de la variable locale indique le paramètre local utilisé par Db2 lorsqu’il a traité l’instruction. Db2 utilisait le paramètre local spécifié dans l’instruction SET CURRENT LOCALE LC_CTYPE ou le paramètre local en vigueur au moment de la tentative d’accès aux paramètres régionaux.

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

Réponse du programmeur :
Selon que les paramètres régionaux ont été explicitement spécifiés dans une instruction SET CURRENT LOCALE LC_CTYPE ou que les paramètres régionaux actuels ont été utilisés implicitement, effectuez l’une des actions suivantes :

  • Si l’instruction était une instruction SET CURRENT LOCALE LC_CTYPE, spécifiez à nouveau un paramètre local correct (connu et disponible pour Db2).
  • Si l’instruction était autre chose que SET CURRENT LOCALE LC_CTYPE, alors l’instruction contenait une interface sensible au paramètre local (la fonction UPPER est un exemple d’interface sensible aux paramètres régionaux).

Exécutez l’instruction suivante pour déterminer la valeur du paramètre local utilisé par votre programme :
SELECT CURRENT LOCALE LC_CTYPE FROM
SYSIBM.SYSDUMMY1.
Une autre raison possible de ce message est que Db2 a utilisé une valeur par défaut du paramètre local incorrecte spécifiée au moment de l’installation. Le paramètre local étant dynamique, il peut être ajouté, créé ou supprimé à tout moment. Db2 ne valide pas la valeur du paramètre local tant qu’elle n’est pas utilisée. Par conséquent, il est possible de spécifier un paramètre local qui n’est pas valide au moment de l’installation.

ETATSQL :
42708

CODE RETOUR -228

FOR UPDATE CLAUSE SPECIFIED FOR READ-ONLY CURSOR cursor-name

Explication :
Un curseur a été déclaré en lecture seule avec l’option INSENSITIVE SCROLL, mais l’instruction SELECT contenait une clause FOR UPDATE.

cursor-name
Nom du curseur utilisé pour le FETCH.

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

Réponse du programmeur :
Pour définir un curseur déroulant en lecture seule, spécifiez INSENSITIVE SCROLL, mais ne spécifiez pas la clause FOR UPDATE. Pour définir un curseur déroulant pouvant être mis à jour, spécifiez SENSITIVE SCROLL. Corrigez le programme d’application pour DECLARE CURSOR de manière appropriée.

ETATSQL :
42620