Tous les articles par Mr COBOL

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

CODE RETOUR -227

FETCH fetch-orientation IS NOT ALLOWED, BECAUSE CURSOR cursor-name HAS AN UNKNOWN POSITION (sqlcode,sqlstate)

Explication :
La position du curseur pour cursor-name est inconnue. La précédente FETCH sur plusieurs lignes pour le curseur cursor-name a entraîné une erreur (SQLCODE sqlcode, SQLSTATE sqlstate) au milieu du traitement de plusieurs lignes extraites de Db2. Une ou plusieurs des lignes demandées n’ont pas pu être renvoyées au programme suite à l’erreur, laissant la position du curseur inconnue.

Si une structure d’indicateur avait été fournie sur le FETCH à plusieurs lignes précédent, un SQLCODE positif aurait été renvoyé et toutes les lignes extraites de Db2 auraient pu être renvoyées au programme d’application.

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

Réponse du programmeur :
Fermez et rouvrez le curseur pour réinitialiser la position. Pour les curseurs déroulants, vous pouvez modifier l’instruction FETCH pour spécifier l’une des autres orientations d’extraction (telles que FIRST, LAST, BEFORE, AFTER ou ABSOLUTE) pour établir une position de curseur valide et extraire une ligne de données.

ETATSQL :
24513

CODE RETOUR -225

FETCH STATEMENT FOR cursor-name IS NOT VALID FOR THE DECLARATION OF THE CURSOR

Explication :
Db2 n’a pas pu traiter une instruction FETCH pour le curseur cursor-name car elle contenait un mot clé non autorisé. L’une des erreurs suivantes s’est produite :

  • Une instruction FETCH pour un curseur non défilant a spécifié l’un des mots clés PRIOR, FIRST, LAST, ABSOLUTE, RELATIVE, CURRENT, BEFORE ou AFTER. Ces mots-clés ne sont pas autorisés pour un curseur qui n’a pas été déclaré avec l’attribut SCROLL, cependant, la clause CURRENT n’est autorisée avec un curseur non défilant que lorsqu’elle est combinée avec la clause CONTINUE.
  • CONTINUE a été spécifié dans l’instruction FETCH, mais le curseur spécifié a été ouvert pour une opération d’extraction de plusieurs lignes. Cette combinaison n’est pas prise en charge.

Action du système :
L’instruction ne peut pas être traitée. Aucune donnée n’a été écrite dans les variables hôte de sortie.

Réponse du programmeur :
Si une option de défilement a été spécifiée dans l’instruction FETCH pour un curseur non défilant, corrigez l’instruction FETCH pour exclure le mot clé non autorisé ou corrigez l’instruction DECLARE CURSOR pour inclure l’option SCROLL appropriée. Si la clause CONTINUE a été spécifiée pour un curseur à plusieurs lignes, modifiez l’application pour utiliser l’extraction d’une seule ligne pour ce curseur. Si l’extraction de plusieurs lignes est requise, utilisez une autre technique, telle qu’un localisateur LOB pour récupérer des valeurs LOB ou XML volumineuses.

ETATSQL :
42872

CODE RETOUR -224

THE RESULT TABLE DOES NOT AGREE WITH THE BASE TABLE USING cursor-name

Explication :
Une UPDATE ou DELETE positionnée a été tentée sur une ligne qui ne correspond plus à sa condition précédente. Les valeurs de colonne de la ligne de la table de résultats ne correspondent plus aux valeurs actuelles de la ligne de la table de base. La ligne a été mise à jour après son insertion dans la table de résultats mais avant la fin de la mise à jour ou de la suppression positionnée.

cursor-name
Le nom du curseur qui a été utilisé pour la mise à jour ou la suppression positionnée.

Action du système :
L’instruction ne peut pas être traitée. Le curseur est positionné sur la même ligne.

Réponse du programmeur :
Corrigez le programme d’application pour gérer cette condition d’erreur ou modifiez les niveaux d’isolement afin que la ligne de base ne puisse pas être mise à jour pendant l’opération du curseur.

ETATSQL :
24512

CODE RETOUR -222

AN UPDATE OR DELETE OPERATION WAS ATTEMPTED AGAINST A HOLE USING CURSOR cursor-name

Explication :
Db2 n’a pas pu traiter une mise à jour ou une suppression positionnée avec le curseur cursor-name défini comme SENSITIVE STATIC. Le programme d’application a tenté d’exécuter une instruction UPDATE ou DELETE WHERE CURRENT OF au moment où le curseur spécifié était positionné sur une ligne de la table d’objets qui est un hole. Chaque ligne sur laquelle se positionne le curseur, à mettre à jour ou à supprimer ne doit pas être un hole :

  • Un update hole se produit lorsque la ligne correspondante de la table sous-jacente a été mise à jour et que la ligne mise à jour ne satisfait plus la condition de recherche spécifiée dans l’instruction SELECT du curseur.
  • Un delete hole se produit lorsque la ligne correspondante de la table sous-jacente a été supprimée.

Cette erreur peut être émise si les situations suivantes se produisent :

  • Si le curseur n’est pas un curseur d’ensemble de lignes, la ligne correspondant à la position actuelle du curseur est soit un trou de mise à jour, soit un trou de suppression. Db2 détecte ces trous lorsque Db2 essaie de mettre à jour ou de supprimer la ligne actuelle de la table de résultats pour le curseur cursor-name et ne peut pas localiser la ligne correspondante de la table sous-jacente.
  • Si le curseur est un curseur d’ensemble de lignes, une ligne correspondant à une ligne de la position actuelle du curseur d’ensemble de lignes est soit un trou de mise à jour, soit un trou de suppression. Db2 détecte ces trous lorsque Db2 essaie de mettre à jour ou de supprimer la ligne actuelle de la table de résultats pour le curseur cursor-name et ne peut pas localiser la ou les lignes correspondantes de la table sous-jacente.


Action du système :
L’instruction ne peut pas être traitée. Aucune donnée n’a été mise à jour ou supprimée et la position du curseur est inchangée.

Réponse du programmeur :
Corrigez la logique du programme d’application pour vous assurer que le curseur est correctement positionné sur la ou les lignes souhaitées de la table d’objets, et que les lignes souhaitées ne sont pas des holes, avant l’exécution de l’instruction DELETE ou UPDATE.

  • Si le curseur n’est pas un curseur d’ensemble de lignes, émettez une instruction FETCH pour positionner le curseur sur une ligne qui n’est pas un trou. Ensuite, relancez l’instruction UPDATE ou DELETE.
  • Si le curseur est un curseur d’ensemble de lignes et qu’il s’agit également de l’instruction UPDATE ou DELETE positionnée destinée à affecter une seule ligne correspondant aux lignes de la position actuelle du curseur d’ensemble de lignes (cela signifie qu’une clause FOR ROW n de ROWSET a été spécifiée), alors modifiez l’instruction UPDATE ou DELETE pour traiter les lignes qui ne sont pas des trous, une par une.
  • Si le curseur est un curseur d’ensemble de lignes et qu’il s’agit également de l’instruction UPDATE ou DELETE positionnée destinée à affecter toutes les lignes correspondant aux lignes de la position actuelle du curseur d’ensemble de lignes (cela signifie qu’une clause FOR ROW n de ROWSET n’a pas été spécifiée), alors modifiez l’instruction UPDATE ou DELETE pour traiter les lignes qui ne sont pas des trous, une par une. Ajoutez une clause FOR ROW n de ROWSET à l’instruction UPDATE ou DELETE pour indiquer quelle ligne du curseur doit être mise à jour ou supprimée.

ETATSQL :
24510

CODE RETOUR -216

THE NUMBER OF ELEMENTS ON EACH SIDE OF A PREDICATE OPERATOR DOES NOT MATCH. PREDICATE OPERATOR IS operator.

Explication :
Le nombre d’expressions spécifiées sur le côté gauche de l’operator OPERATOR est différent du nombre de valeurs renvoyées par le fullselect ou du nombre d’expressions spécifiés sur le côté droit de l’opérateur. Le nombre d’expressions et le nombre de valeurs/expressions de chaque côté de l’opérateur doivent être égaux.

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

Réponse du programmeur :
Modifiez le nombre d’expressions pour qu’il corresponde au nombre de valeurs renvoyées par le fullselect ou vice versa.

ETATSQL :
428C4

CODE RETOUR -214

AN EXPRESSION IN THE FOLLOWING POSITION, OR STARTING WITH position-or-expression-start IN THE clause-type CLAUSE IS NOT VALID. REASON CODE = reason-code

Explication :
L’expression identifiée par la première partie de l’expression expression-start dans la clause clause-type n’est pas valide pour la raison spécifiée par le reason-code comme suit :

1

Le fullselect de l’instruction select n’est pas une sous-sélection. Les expressions ne sont pas autorisées dans la clause ORDER BY pour ce type d’instruction select. Ce code anomalie se produit uniquement lorsque le  clause-type est ORDER BY.

2

DISTINCT est spécifié dans la clause SELECT, et un nom de colonne ou une sort-key-expression dans la clause ORDER BY ne peut pas correspondre exactement à un nom de colonne ou une expression dans la liste de sélection. Ce code anomalie se produit uniquement lorsque le  clause-type est ORDER BY.

3

La liste de sélection comprend une fonction d’agrégat ou la sous-sélection comprend une clause GROUP BY et l’expression n’est pas une fonction d’agrégat ou ne correspond pas exactement à une expression de la liste de sélection.

4

Le regroupement est provoqué par la présence d’une fonction d’agrégat dans la clause ORDER BY. Ce code anomalie se produit uniquement lorsque le clause-type est ORDER BY.

5

L’expression dans une clause GROUP BY ne peut pas contenir de scalaire-fullselect. Ce code anomalie se produit uniquement lorsque le clause-type est GROUP BY.

6

Utilisation non valide de scalar-fullselect. Ce code anomalie peut être émis lorsque le scalar-fullselect apparaît dans une clause ORDER BY, l’instruction RETURN d’une fonction SQL contient un scalar-fullselect ou un scalar-fullselect est passé en tant qu’argument sur une instruction CALL pour un paramètre qui est défini comme paramètre d’entrée (IN).

8

DISTINCT est spécifié dans la fonction LISTAGG et la première expression d’argument ne peut pas correspondre exactement à la première expression de clé de tri de ORDER BY spécifiée dans la clause WITHIN GROUP. Ce code anomalie se produit uniquement lorsque le clause-type est ORDER BY.

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

Réponse du programmeur :
Modifiez l’instruction select en fonction de la raison spécifiée par le code de raison. Utilisez les suggestions suivantes pour modifier l’instruction select :

1

Supprimez l’expression de la clause ORDER BY. Si vous essayez de référencer une colonne du résultat, remplacez la clé de tri par la forme simple-integer ou simple-column-name. Pour plus d’informations, consultez le diagramme de syntaxe ORDER BY dans order-by-clause.

2

Supprimez DISTINCT de la clause SELECT.

3

Remplacez l’expression de la clause ORDER BY ou GROUP BY par une fonction d’agrégat ou modifiez la clause pour utiliser un identificateur de colonne numérique ou un nom de colonne.

4

Ajoutez une clause GROUP BY ou supprimez la fonction d’agrégat de la clause ORDER BY.

5

Supprimez le fullselect scalaire de la clause GROUP BY.

6

Supprimez le scalaire fullselect de l’instruction.

8

Lorsque DISTINCT est spécifié dans la fonction LISTAGG, assurez-vous que ORDER BY est spécifié et que la première expression de clé de tri correspond à l’argument de LISTAGG.

ETATSQL :
42822

CODE RETOUR -212

name IS SPECIFIED MORE THAN ONCE IN THE REFERENCING CLAUSE OF A TRIGGER DEFINITION

Explication :
La clause REFERENCING d’une instruction CREATE TRIGGER a spécifié le même nom pour plusieurs des noms de corrélation OLD ou NEW ou pour les identificateurs OLD_TABLE ou NEW_TABLE. name est le nom qui a été spécifié plusieurs fois.

Action du système :
L’instruction ne peut pas être traitée. Le déclencheur n’a pas été créé.

Réponse du programmeur :
Modifiez l’instruction pour spécifier des noms uniques pour toutes les variables et tables de transition dans la clause REFERENCING et soumettez à nouveau la demande CREATE TRIGGER.

ETATSQL :
42712