Tous les articles par Mr COBOL

CODE RETOUR -818

THE PRECOMPILER-GENERATED TIMESTAMP horodatage-1 IN THE LOAD MODULE IS DIFFERENT FROM THE BIND TIMESTAMP hondatage-2 BUILT FROM THE DBRM

Explication :

Le précompilateur SQL place un ‘horodatage-2’ dans le DBRM et un ‘horodatage-1’

dans la liste des paramètres de chaque ordre SQL du programme. Au moment du BIND. DB2 enregistre l’horodatage du DBRM pour l’utiliser à l’exécution. A l’exécution, ‘horodatage-1’ de l’ordre SQL est comparé à ‘horodatage-2’ dérivé du DBRM lors du BIND. Si les deux horodatages sont différents, le DBRM et le programme ne sont pas issus de la même précompilation.

Causes possibles de l’erreur :

  • Précompilation, compilation et linkedit, sans BIND de l’application,
  • Précompilation et BIND, sans compilation et linkedit,
  • BIND de l’application avec un DBRM résultant d’une précompilation différente de celle utilisée pour la préparation de l’application.

Les horodatages sont internes à DB2 et ne possèdent pas d’interprétation externe.

Action système :

L’ordre ne peut être exécuté.

Réponse programmeur :

Exécuter un BIND de l’application en utilisant le DBRM du programme correspondant au module objet.

CODE RETOUR -817

THE INSERT, UPDATE, DELETE, DDL, OR AUTHORIZATION STATEMENT CANNOT BE EXECUTED BECAUSE THE IMS/VS TRANSACTION IS INQUIRY ONLY

Explication :

Une application définie comme transaction d’interrogation uniquement, tente d’exécuter un ordre INSERT, UPDATE, DELETE, ou un ordre du LDD (CREATE, ALTER ou DROP), ou un ordre du LCD (GRANT ou REVOKE). Les ordres de ce type entraînent des mises à jour des données utilisateur ou du catalogue DB2 et par conséquent ne peuvent être exécutés sous des transactions d’interrogation.

Action système :

L’ordre ne peut être exécuté.

Réponse programmeur :

Consulter le programmeur système IMS/VS pour qu’il change le statut de la transaction en vue d’accepter ces mises à jour.

CODE RETOUR -815

A GROUP BY OR HAVING CLAUSE IS IMPLICITLY OR EXPLICITLY SPECIFIED IN AN EMBEDDED SELECT STATEMENT OR A SUBQUERY OF A BASIC PREDICATE

Explication :

Un ordre SELECT INTO ou une sous-requête d’un prédicat mono-valué, contient directement une clause GROUP BY ou HAVING, ou utilise une vue comportant une clause GROUP BY ou HAVING. Ces codifications sont interdites.

Action système :

L’ordre ne peut être exécuté. Aucune donnée n’est extraite.

Réponse programmeur :

Cette fonction n’est pas supportée par DB2. Dans le cas d’une vue, les ordres SELECT intégrés ne peuvent pas extraire des données de cette vue.

CODE RETOUR -811

THE RESULT OF AN EMBEDDED SELECT STATEMENT IS A TABLE OF MORE THAN ONE ROW, OR THE RESULT OF THE SUBQUERY OF A BASIC PREDICATE IS MORE THAN ONE VALUE

Explication :

Un ordre SELECT INTO retourne plus d’une ligne, ou une sous-requête produit plus d’une valeur sur un prédicat mono-valué.

Action système :

L’ordre ne peut être exécuté.

Réponse programmeur :

Examiner la syntaxe de l’ordre en s’assurant qu’il contient les bonnes spécifications des conditions. Le problème peut venir d’un résultat non prévu sur les données. Un résultat multi-ligne sur un ordre SELECT doit être géré par un curseur.

CODE RETOUR -805

PROGRAM NAME nom-programme NOT FOUND IN PLAN nom-plan

Explication :

Tentative d’exécution du programme d’application ‘nom-programme’ avec un DBRM non “bindé” avec le plan ‘nom-plan’.

Action système :

L’ordre ne peut être exécuté.

Réponse programmeur :

Faire un rebind de l’application. Vérifier que tous les DBRMs de l’application sont spécifiés dans la commande BIND (y compris les sous-programmes).

CODE RETOUR -803

AN INSERTED OR UPDATED VALUE IS INVALID BECAUSE THE INDEX nom-index CONSTRAINS COLUMNS OF THE TABLE SUCH THAT NO TWO ROWS CAN CONTAIN DUPLICATE VALUES IN THOSE COLUMNS. RID OF EXISTING ROW IS X’numéro-rid’

Explication :

La table touchée par une opération INSERT ou UPDATE possède une contrainte d’unicité sur certaines colonnes, gérée par un UNIQUE INDEX de nom ‘nom-index’. Le résultat de la demande se traduirait par des valeurs dupliquées sur la ligne identifiée par ‘numéro-rid’

Si l’objet de la mise à jour est une vue, c’est la table définissant cette vue qui possède la contrainte. La mise à jour peut aussi être induite par une opération DELETE sur une ligne parent liée à une ligne dépendante par une règle de destruction SET NULL.

Action système :

L’ordre INSERT, UPDATE ou DELETE ne peut être exécuté. La table reste inchangée.

Réponse programmeur :

Examiner la définition de l’index ‘nom-index” pour déterminer la contrainte d’unicité imposée.

Pour un ordre UPDATE, vérifier que l’opération est compatible avec la contrainte d’unicité. Le cas échéant, examiner la table pour déterminer la cause du problème.

Pour un ordre INSERT, examiner la table pour déterminer les valeurs qui enfreignent la contrainte d’unicité. Si l’ordre INSERT contient une sous-requête, croiser le résultat de la sous-requête avec le contenu de la table afin de déterminer la cause du problème.

Pour un ordre DELETE, examiner les colonnes clés de la table qui définissent l’index. Ces colonnes contiennent une clé étrangère qui, lors d’un DELETE en cascade avec mise à NULL des valeurs, provoque une duplication de valeurs.

CODE RETOUR -802

EXCEPTION ERROR type-exception HAS OCCURRED DURING type-opération OPERATION ON type-donnée DATA, POSITION numéro-position

Explication:

Le traitement d’une fonction ou d’une expression arithmétique figurant dans la liste d’un ordre SELECT, ou dans une condition de recherche d’un ordre SELECT. UPDATE ou DELETE. ou pendant l’évaluation d’une fonction de colonne, ou dans la clause SET d’un ordre UPDATE, a détecté une erreur d’exception, éventuellement indiquée par ‘type- exception’. Les ‘type-exception’ possibles sont : FIXED POINT OVERFLOW, DECIMAL OVERFLOW, DIVIDE EXCEPTION, et EXPONENT OVERFLOW. ‘type- donnée’ peut indiquer les types de donnée des éléments en cours de manipulation et ‘type-opération’ peut préciser l’opération en cours de traitement au moment de l’erreur. Si l’erreur se produit sur un SELECT externe, ‘numéro-position’ indique la position de l’expression incriminée dans la liste du SELECT.

Les ‘type-donnée’ possibles sont : INTEGER, SMALLINT. DECIMAL ou FLOAT. Le type de donnée peut être différent de celui de la colonne ou du littéral incriminé dans le cas de conversions par DB2. Les ‘type-opération’ possibles sont : ADDITION, SUBTRACTION, MULTIPLICATION. DIVISION et NEGATION.

Un FIXED POINT OVERFLOW peut apparaître dans une opération sur des champs INTEGER ou SMALLINT.

Un DECIMAL OVERFLOW peut apparaître lors de la perte de chiffres significatifs, due à une longueur trop courte du champ destiné à accueillir le résultat.

Un DIVIDE EXCEPTION peut apparaître lors d’une division par zéro d’un champ numérique, ou lorsque le quotient de la division dépasse la taille du champ spécifié.

Un EXPONENT OVERFLOW peut apparaître dans une opération en virgule flottante lorsque la mantisse dépasse 127 alors que l’exposant n’est pas zéro.

Note :

Les informations ‘type-exception’, ‘type-donnée’, ‘type-opération’, ‘numéro-position’ peuvent ne pas être retournées en SQLCA, en fonction du moment de détection de l’erreur.

Action système :

L’ordre ne peut être exécuté. Dans le cas d’un ordre UPDATE ou DELETE, aucune donnée n’est mise à jour ou détruite. Si l’ordre est un FETCH, le curseur reste ouvert. Si l’ordre est un OPEN, le curseur reste fermé.

Réponse programmeur :

Examiner l’ordre SQL pour déterminer la cause du problème. Le problème peut être dépendant des données. Analyser les données incriminées lors de la détection de l’erreur.

Si l’expression arithmétique en erreur figure sur la liste d’un SELECT externe, il est recommandé de coder une variable indicateur pour chaque expression de la liste. Cette méthode permet de poursuivre le traitement et de fournir une valeur pour toutes les colonnes et expressions non erronées.

Voir l’explication du code -405 pour les plages de valeurs des différents types de donnée.

CODE RETOUR -601

THE NAME OF THE OBJECT TO BE CREATED IS IDENTICAL TO THE EXISTING NAME nom OF THE OBJECT TYPE type-objet

Explication :

L’ordre CREATE tente de créer un objet ‘nom’ de type ‘type-objet qui est déjà un objet de ce type avec le même nom dans le sous-système DB2. Si ‘type-objet’ est un nom de contrainte, le ‘nom’ a été spécifié sur la clause FOREIGN KEY d’un ordre CREATE ou ALTER TABLE.

Action système :

L’ordre CREATE ou ALTER ne peut être exécuté. Aucun nouvel objet n’est créé, et l’objet existant n’est pas altéré.

Réponse programmeur :

L’objet existant doit être détruit, ou un autre nom doit être choisi. Si ‘type-objet’ est un dataset, un IDCAMS DELETE doit être exécuté avant le CREATE. Se référer à la codification des noms d’objets DB2.

CODE RETOUR -551

Identifiant DOES NOT HAVE THE PRIVILEGE TO PERFORM OPERATION opération ON OBJECT non-objet

Explication :

Un utilisateur reconnu par’identifiant’ tente une opération sur un objet, sans avoir reçu l’autorisation de le faire. Cette erreur apparaît aussi, si l’objet n’existe pas, si l’objet est une vue read-only (pour UPDATE et INSERT), ou si l’utilisateur essaie de créer une table ou une vue avec un autre identifiant que le sien. Seuls les profils SYSADM, DBADM et DBCTRL permettent de créer des tables avec un autre identifiant. Seul le profil SYSADM peut créer une vue avec un autre identifiant.

Si cette erreur survient pendant que DB2 crée ou modifie une table comportant des contraintes référentielles, ce code signifie que l’utilisateur ne possède pas le privilège ALTER nécessaire pour les opérations DROP FOREIGN KEY ou DROP PRIMARY KEY. L’objet ‘nom-objet’ identifie la table de l’ordre CREATE ou ALTER TABLE, et non la table pour laquelle l’utilisateur n’a pas le privilège ALTER.

Action système :

L’ordre ne peut être exécuté.

Action installation :

Vérifier la tentative de violation d’autorisation.

Réponse programmeur :

S’assurer que ‘identifiant’ a bien reçu l’autorisation pour l’opération demandée, vérifier que ‘nom-objet’ existe, et que ‘identifiant’ n’essaie pas de créer une table ou une vue avec un autre identifiant.

CODE RETOUR -542

nom-colonne CANNOT BE A COLUMN OF A PRIMARY KEY BECAUSE IT CAN CONTAIN NULL VALUES

Explication :

Une colonne identifiée dans une clause PRIMARY KEY autorise la valeur NULL.

Action système :

L’ordre ne peut être exécuté.

Réponse programmeur :

Corriger l’ordre.