Tous les articles par Mr COBOL

CODE RETOUR -545

THE REQUESTED OPERATION IS NOT ALLOWED BECAUSE A ROW DOES NOT SATISFY THE CHECK CONSTRAINT check-constraint

Explication
Vérifiez que des violations de contrainte se sont produites sur une instruction INSERT, UPDATE ou MERGE. La ligne résultante a violé la définition de contrainte de vérification sur la table.

Action du système
L’instruction INSERT, UPDATE ou MERGE ne peut pas être exécutée. Le contenu du tableau est inchangé.

Réponse du programmeur
Examinez les données et la définition de contrainte de vérification dans la table de catalogue SYSIBM.SYSCHECKS pour déterminer pourquoi l’instruction INSERT, MERGE, DELETE ou UPDATE a été rejetée. Les données doivent être modifiées pour satisfaire la contrainte de vérification.

SQLSTATE
23513

CODE RETOUR -544

THE CHECK CONSTRAINT SPECIFIED IN THE ALTER TABLE STATEMENT CANNOT BE ADDED BECAUSE AN EXISTING ROW VIOLATES THE CHECK CONSTRAINT

Explication
Une ligne existante viole la contrainte de vérification spécifiée dans l’instruction ALTER TABLE.

Action du système
L’instruction ne peut pas être traitée. La définition de contrainte de vérification n’est pas ajoutée à la table. La définition de la table est inchangée.

Réponse du programmeur
Examinez la définition de contrainte de vérification qui a été spécifiée dans l’instruction ALTER TABLE et les données de la table pour déterminer pourquoi l’instruction ALTER TABLE a été rejetée.

Vous pouvez déterminer quelles lignes ont violé la contrainte de vérification à l’aide de l’instruction SELECT, annulant la contrainte de vérification dans la clause WHERE.

Par exemple:

SELECT * FROM table WHERE (NOT (check-condition));


SQLSTATE
23512

CODE RETOUR -543

A ROW IN A PARENT TABLE CANNOT BE DELETED BECAUSE THE CHECK CONSTRAINT check-constraint RESTRICTS THE DELETION

Explication
L’opération de suppression ne peut pas être exécutée car la table cible est une table parent et est connectée avec une contrainte référentielle à une table dépendante avec une règle de suppression SET NULL. Cependant, une contrainte de vérification définie sur la table dépendante empêche la colonne de contenir une valeur nulle.

Action du système
L’instruction DELETE n’a pas été exécutée. Le contenu des tableaux est inchangé.

Réponse du programmeur
Examinez la clé étrangère et sa règle de suppression dans la table dépendante et la contrainte de vérification en conflit. Modifiez la règle de suppression ou la contrainte de vérification afin qu’elles n’entrent pas en conflit.

SQLSTATE
23511

CODE RETOUR -526

THE REQUESTED OPERATION OR USAGE DOES NOT APPLY TO table-type TEMPORARY TABLE table-name

Explication
DB2 suppose que l’instruction SQL en cours d’exécution fait référence à une table temporaire créée ou déclarée, nommée  table-name , et que l’opération ou l’utilisation demandée dans l’instruction n’est pas autorisée sur la table temporaire.

table-type
CREATED ou DECLARED
CREATED est pour une table temporaire définie par l’instruction CREATE GLOBAL TEMPORARY TABLE.

DECLARED concerne une table temporaire définie par l’instruction DECLARE GLOBAL TEMPORARY TABLE.

table-name
Nom qualifié de la table temporaire.

Cette erreur peut être émise pour les raisons suivantes lorsque le table-type est CREATED :

  • Si l’instruction SQL est une instruction DELETE qui spécifie la clause d’extraction, supprimez la clause d’extraction de l’instruction DELETE.
  • Une clause KEY LABEL est spécifiée.

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

Réponse du programmeur
Modifiez l’instruction SQL pour vous assurer que les références d’objet ne sont pas au type de table temporaire indiqué

Si le table-type est DÉCLARÉ et que vous souhaitiez que table-name fasse référence à une table de base persistante existante, vous devez effectuer l’une des actions suivantes :

  • Recréez la table de base persistante table-name avec un autre qualificateur de schéma
  • Dans le même processus d’application, émettez un DROP TABLE pour le nom de la table table-name suivi d’un COMMIT pour supprimer la table temporaire déclarée et pouvoir ensuite référencer la table de base persistante avec le même table-name dans le même processus d’application
  • Supprimez l’instruction DECLARE GLOBAL TEMPORARY TABLE du processus d’application pour utiliser la table de base persistante avec le même nom de table

Si table-type est CREATED, effectuez l’action suivante et relancez l’instruction :

  • Si l’instruction SQL est une instruction DELETE qui spécifie la clause d’extraction, supprimez la clause d’extraction de l’instruction DELETE.
  • Si l’instruction SQL contient une clause KEY LABEL, supprimez la spécification d’étiquette de clé.

SQLSTATE
42995

CODE RETOUR -525

THE SQL STATEMENT CANNOT BE EXECUTED BECAUSE IT WAS IN ERROR AT BIND TIME FOR SECTION = sectno PACKAGE = pkgname CONSISTENCY TOKEN = contoken

Explication
L’un des éléments suivants :

  • L’instruction était erronée lorsque le package a été lié, mais l’erreur a ensuite été ignorée car l’option SQLERROR (CONTINUE) a été utilisée. Comme l’instruction contient une erreur, elle ne peut pas être exécutée.
  • L’instruction peut ne pas être une instruction exécutable à cet emplacement, ou peut n’être exécutable que par un demandeur d’application Db2 (par exemple, DECLARE TABLE dans une application s’exécutant sur OS/2 provoque ce message).

Les variables sont :
sectno
Numéro de section
pkgname
locid.collid.pkgid
contoken
Jeton de cohérence en hexadécimal

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

Réponse du programmeur
Si l’instruction SQL n’est pas censée s’exécuter à l’emplacement indiqué, corrigez le programme afin que l’instruction erronée ne s’exécute pas à cet emplacement. Précompiler, compiler et lier remplacent le package. Si l’instruction SQL est censée s’exécuter à l’emplacement indiqué, corrigez le problème détecté lors de la liaison et liez le package à l’aide de BIND avec ACTION(REPLACE). Si plusieurs versions du package ont été liées, émettez l’instruction SELECT suivante pour déterminer quelle version a l’erreur : SELECT VERSION FROM locid.SYSIBM.SYSPACKAGE WHERE LOCATION = ‘ ‘ AND COLLID = ‘collid’ AND NAME = ‘pkgid’ AND HEX (CONTOKEN) = ‘contoken’

Où:
locid
Nom de la localisation
collid
Identifiant de la collection
pkgid
Nom du programme

SQLSTATE
51015

CODE RETOUR -519

THE PREPARE STATEMENT IDENTIFIES THE SELECT STATEMENT OF THE OPENED CURSOR cursor-name

Explication
Le programme d’application a tenté de PREPARE (en fait, de re-PREPARE) l’instruction SELECT pour le curseur spécifié à un moment où ce curseur était déjà ouvert.

Action du système
L’instruction ne peut pas être traitée. Le curseur n’a pas été affecté.

Réponse du programmeur
Corrigez la logique du programme d’application afin qu’il ne tente pas de re-PREPARE l’instruction SELECT pour un curseur lorsque ce curseur est ouvert.

SQLSTATE
24506

CODE RETOUR -518

THE EXECUTE STATEMENT DOES NOT IDENTIFY A VALID PREPARED STATEMENT

Explication
L’une des conditions suivantes existe :

  • L’instruction identifiée dans l’instruction EXECUTE n’a pas été préparée.
  • L’instruction identifiée dans l’instruction EXECUTE identifie une instruction SELECT ou ASSOCIATE LOCATORS
  • L’instruction identifiée dans l’instruction EXECUTE IMMEDIATE identifie une instruction SELECT ou ASSOCIATE LOCATORS.
  • L’instruction identifiée dans l’instruction EXECUTE est une instruction de définition de données écrite en langage SQL natif et cette instruction a déjà été exécutée.
  • Une instruction COMMIT ou ROLLBACK a été émise. L’opération COMMIT ou ROLLBACK a détruit la version préparée de l’instruction.

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

Réponse du programmeur
Assurez-vous de préparer la déclaration avant d’EXÉCUTER. Assurez-vous également que l’instruction préparée n’est pas :

  • Une instruction SELECT.
  • Une instruction ASSOCIATE LOCATORS.

Si l’instruction est une instruction de définition de données écrite en langage SQL natif et que cette instruction a déjà été exécutée, vous devez la préparer à nouveau avant de pouvoir l’exécuter à nouveau.

Si l’instruction préparée est émise après une instruction COMMIT ou ROLLBACK, effectuez l’une des actions suivantes :

  • Préparez à nouveau la déclaration.
  • Liez le package d’application avec l’option KEEPDYNAMIC(YES) pour conserver l’instruction préparée après une instruction COMMIT ou ROLLBACK.
  • Liez le package d’application avec RELEASE(DEALLOCATE) pour conserver une instruction préparée qui référence les tables temporaires déclarées après une instruction COMMIT.

SQLSTATE
07003

CODE RETOUR -517

CURSOR cursor-name CANNOT BE USED BECAUSE ITS STATEMENT NAME DOES NOT IDENTIFY A PREPARED SELECT STATEMENT

Explication
Le curseur ‘cursor-name‘ n’a pas pu être utilisé comme spécifié car l’instruction préparée nommée dans la déclaration du curseur n’était pas une instruction SELECT.

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

Réponse du programmeur
Vérifiez que le nom-instruction est correctement spécifié dans l’instruction PREPARE et l’instruction DECLARE CURSOR pour le curseur ‘cursor-name‘. Vous pouvez également corriger la logique du programme d’application pour vous assurer que seules les instructions SELECT préparées sont utilisées en association avec les déclarations de curseur.

SQLSTATE
07005

CODE RETOUR -516

THE DESCRIBE STATEMENT DOES NOT SPECIFY A PREPARED STATEMENT

Explication
Une tentative a été faite pour exécuter une instruction DESCRIBE qui ne faisait pas référence à une instruction qui avait été préparée avec succès sur le serveur actuel.

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

Réponse du programmeur
Vérifiez que le nom de l’instruction spécifié dans l’instruction DESCRIBE est une instruction qui a été préparée sur le serveur actuel.

SQLSTATE
26501

CODE RETOUR -514

THE CURSOR cursor-name IS NOT IN A PREPARED STATE

Explication
Le programme d’application a essayé d’utiliser un curseur, ‘cursor-name‘, qui n’est pas dans un état préparé. Le curseur est associé à une instruction qui :

  1. N’a jamais été préparé.
  2. A été invalidé par une opération de validation ou d’annulation

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

Réponse du programmeur
Pour le cas 1, assurez-vous de préparer l’instruction nommée dans l’instruction DECLARE CURSOR pour ‘cursor-name‘ avant d’essayer d’ouvrir le curseur.

Pour le cas 2, effectuez l’une des actions suivantes :

  • Utilisez l’option WITH HOLD de DECLARE CURSOR.
  • N’exécutez pas d’opération de validation ou d’annulation tant que vous n’avez pas fini d’utiliser le curseur.
  • Préparez à nouveau l’instruction après la validation ou l’annulation.

SQLSTATE
26501