Archives de catégorie : SQLCODE

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

CODE RETOUR -197

A QUALIFIED COLUMN NAME IS NOT ALLOWED IN THE ORDER BY CLAUSE WHEN A SET OPERATOR IS ALSO SPECIFIED

Explication :
La clause ORDER BY d’un fullselect qui inclut un opérateur d’ensemble, tel que UNION, EXCEPT ou INTERSECT, ne peut pas avoir de noms de colonnes qualifiés.

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

Réponse du programmeur :
Modifiez l’instruction pour vous assurer que tous les noms de colonne dans la clause ORDER BY ne sont pas qualifiés.

ETATSQL :
42877

CODE RETOUR -196

COLUMN table-name.column-name CANNOT BE DROPPED. REASON = reason-code.

Explication :
Une tentative de suppression de la colonne spécifiée a été effectuée, mais la colonne ne peut pas être supprimée pour la raison indiquée.

table-name
Le nom de la table.
column-name
Le nom de la colonne.

reason-code
Une valeur numérique qui indique la raison pour laquelle l’instruction ne peut pas être exécutée.

1

La colonne ne peut pas être supprimée car elle fait partie de la clé de hachage ou de la clé de partitionnement.

3

La colonne ne peut pas être supprimée car il s’agit d’une colonne d’étiquette de sécurité.

4

La colonne ne peut pas être supprimée car elle fait partie d’un point.

5

La colonne ne peut pas être supprimée car la table est une table temporelle de période système ou une table activée pour l’archivage.

6

La colonne ne peut pas être supprimée car il s’agit d’une colonne d’une table d’historique ou d’une table d’archive.

8

La table, table-name, est définie avec une procédure d’édition ou une procédure de validation.

9

La table, table-name, est référencée (directement ou indirectement) dans la définition d’une table de requête matérialisée.

10

Une contrainte de vérification est définie sur la table, table-name.

11

Un index étendu est défini sur la table, table-name.

12

Un déclencheur est défini sur la table, table-name ou un déclencheur INSTEAD OF est défini sur une vue qui dépend de la table.

13

Une autorisation de ligne dépend de la table, table-name.

14

Un masque de colonne dépend de la table, table-name.

15

Une fonction de table SQL dépend de la table, table-name.

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

Réponse du programmeur :
Effectuez l’action qui correspond à la valeur du reason-code :

1

  • Si la colonne fait partie d’une clé de partitionnement, supprimez la table et créez-la à nouveau sans la colonne qui doit être supprimée et redéfinissez la clé de partitionnement.
  • Si la colonne fait partie d’une clé de hachage :
    1. Modifiez la table pour supprimer l’organisation de hachage.
    2. Déposez la colonne.
    3. Exécutez l’utilitaire REORG sur l’espace table contenant afin que l’opération de suppression de colonne prenne effet.
    4. Modifiez la table pour ajouter l’organisation de hachage.

Comme alternative, envisagez de supprimer la table et de la recréer sans la colonne qui doit être supprimée.

3

Supprimez la table et créez-la à nouveau, sans créer la colonne d’étiquette de sécurité.

4

Supprimez la table et créez-la à nouveau, sans créer la colonne qui doit être supprimée.

5

Modifiez le tableau pour supprimer la gestion des versions des données de période système ou désactiver l’archivage. (Émettez ALTER TABLE avec la clause DROP VERSIONING ou DISABLE ARCHIVE.) Supprimez ensuite la colonne de la table.
Si le contrôle de version ou l’archivage de la période système est toujours nécessaire, supprimez la colonne de la table d’historique ou de la table d’archivage précédemment associée. Ajoutez ensuite le contrôle de version ou l’archivage des données de période système à la table.

6

Supprimez la gestion des versions ou l’archivage afin que la table ne soit plus une table d’historique ou une table d’archive. (Utilisez l’instruction ALTER TABLE avec la clause DROP VERSIONING ou DISABLE ARCHIVE sur la table temporelle de période système ou la table activée pour l’archivage associée.) Supprimez ensuite la colonne de la table.
Si la gestion des versions ou l’archivage est toujours nécessaire, supprimez la colonne de la table temporelle de période système ou de la table activée pour l’archivage. Ajoutez ensuite le contrôle de version ou l’archivage à cette table.

8

Si la table est définie avec une procédure de validation, modifiez la table pour supprimer la procédure valide, puis supprimez la colonne. Si la table est définie avec une procédure d’édition, supprimez la table et recréez-la sans la colonne qui doit être supprimée.

9

Supprimez toutes les tables de requêtes matérialisées qui font référence à la table, puis supprimez la colonne.

10

Supprimez et vérifiez les contraintes qui font référence à la table, puis supprimez la colonne.

11

Supprimez tous les index étendus qui font référence à la table, puis supprimez la colonne.

12

Supprimez tous les déclencheurs qui font référence à la table ou aux vues dépendantes, puis supprimez la colonne.

13

Supprimez toutes les autorisations de ligne qui font référence à la table, puis supprimez la colonne.

14

Supprimez tous les masques de colonne qui font référence à la table, puis supprimez la colonne.

15

Supprimez toutes les fonctions de table SQL qui font référence à la table, puis supprimez la colonne.

ETATSQL :
42817

CODE RETOUR -195

LAST COLUMN OF table-name CANNOT BE DROPPED

Explication :

table-name
Le nom de la table.

Tentative de suppression d’une colonne à l’aide d’une instruction ALTER TABLE. La colonne ne peut pas être supprimée de la table table-name car au moins une des colonnes existantes doit être conservée lors de la modification d’une table.

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

Réponse du programmeur :
Assurez-vous que la table, table-name, aura au moins une colonne une fois l’instruction ALTER terminée. Si toutes les colonnes doivent être supprimées, envisagez de supprimer la table (et si nécessaire, créez-la à nouveau).

ETATSQL :
42814