txt 16h26

Module MEMENTO SQL / DB2 

Chapitre Les codes retour SQL 1-1

Introduction :
Le code retour SQL ainsi que des informations explicatives, sont envoyés par DB2, après traitement de chaque ordre SQL, dans la zone de communication SQLCA.

Le code retour SQL alimente le champ SQLCODE de la structure SQLCA. Les informations sont placées dans le champ SQLERRM. Lorsqu'il y a plusieurs informations, elles figurent en séquence, séparées par le caractère X'FF', selon leur ordre d'apparition dans le texte du message.

Une information figure en italique dans le texte du message. Lorsque le code retour est émis sous SPUFI, les informations sont substituées dans le texte du message, et le message est affiché au terminal. Cette substitution est traitée par le module DB2 : DSNTIAR. Ce module est utilisable dans les programmes d'application.

Chaque code retour est accompagné des rubriques ci-dessous, dans le cas où elles s'appliquent :

•   Explication : Donne la signification du code retour SQL ainsi que les causes possibles de son émission.
•   Action système : Indique l'action entreprise par le système lors de la production du code retour.
•   Réponse utilisateur : Précise les réponses pertinentes, et leurs effets, attendues de la part de l'utilisateur. Si cette rubrique n'apparaît pas, aucune intervention de l'utilisateur n'est nécessaire.
•   Réponse opérateur : Indique les réponses pertinentes, et leurs effets, attendues de la part de l'opérateur. Si cette rubrique n'apparaît pas, aucune intervention de l'opérateur n'est nécessaire.
•   Réponse programmeur système : Donne les réponses pertinentes, et leurs effets, attendues de la part du programmeur système. Si cette rubrique n'apparaît pas, aucune intervention du programmeur système n'est nécessaire.
•   Réponse programmeur : Indique les actions de correction que le programmeur doit entreprendre afin d'éliminer la condition d'erreur. Si cette rubrique n'apparaît pas, aucune intervention du programmeur n'est nécessaire.
•   Détermination du problème : Donne la démarche de collecte d'informations nécessaires au support technique, pour diagnostiquer le problème. Si cette rubrique n'apparaît pas, aucune action n'est nécessaire.

LISTE NON EXHAUSTIVE Consulter Ja brochure IBM : DB2 CODES

Chapitre 1-3

CODE EXECUTION CORRECTE

000 SUCCESSFUL EXECUTION

Explication :
L'ordre SQL a probablement été exécuté correctement. Vérifier que le champ SQLWARNO est à blanc. S'il est à blanc, l'ordre est correctement exécuté, sinon une condition d'avertissement existe. Contrôler les autres indicateurs pour connaître la raison de cet avertissement. Par exemple, si SQLWARN1 contient W, une chaîne a été tronquée.


Chapitre 1-4

CODES D'AVERTISSEMENT ou WARNING

+ 100 ROW NOT FOUND FOR FETCH, UPDATE OR DELETE, OR THE RESULT OF A QUERY IS AN EMPTY TABLE

Explication : Une des conditions suivantes s'est produite :

•      Aucune ligne ne satisfait les critères de recherche précisés sur un ordre UPDATE ou DELETE.
•       Le résultat d'un ordre SELECT INTO est une table vide.
•       Un ordre FETCH a été émis alors que le curseur était positionné après la dernière ligne de la table résultante (condition fin de table).
•       Le résultat de la sous-requête d'un ordre INSERT est vide.

Lorsqu'un ordre SELECT est exécuté sous SPUFI, ce code retour indique une exécution normale (fin de la table résultat).

Action système : Aucune donnée n'est extraite, mise à jour ou supprimée.


+ 162 TABLESPACE nom-database.nom-tablespace HAS BEEN PLACED IN CHECKPENDING

Explication : Le tablespace cité est en statut CHECK PENDING, suite à l'ajout d'une contrainte d'intégrité référentielle par un ordre ALTER TABLE sur une table déjà chargée. Le tablespace est généralement indisponible tant que le statut CHECK PENDING subsiste.

Action système : Le tablespace à été placé en statut CHECKPENDING.

Réponse programmeur : II est conseillé d'utiliser l'utilitaire CHECK DATA.

+ 304 A VALUE WITH DATA TYPE type-donnée-1 CANNOT BE ASSIGNED TO A HOST  VARIABLE BECAUSE THE VALUE IS NOT WITHIN THE RANGE OF THE HOST   VARIABLE IN  POSITION numéro-position WITH DATA TYPE type-donnée-2

Explication : Sur un ordre FETCH ou SELECT INTO, une host variable de type 'type-donnée-2 n'est pas assez grande pour accueillir une valeur extraite de type 'type-donnée-1'. La host variable incriminée est identifiée par sa position 'numéro-position' à l'intérieur de la liste ou de la structure.

Action système : L'ordre FETCH ou SELECT INTO ne transfère pas la valeur, la variable indicateur est positionnée à -2. Le traitement continue.

Réponse programmeur : Vérifier que les définitions de la table sont en phase avec celles du programme, et que la host variable possède le bon type de donnée. Voir l'explication du code -405 pour les plages de valeurs des différents types de donnée.


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

Explication : Une erreur 'type-exception' est survenue pendant une opération d'addition, de soustraction, de multiplication, de division ou de négation sur un champ de type DECIMAL, FLOAT, SMALLINT ou INTEGER. ^ Cette erreur s'est produite dans une expression arithmétique figurant dans la liste d'un SELECT externe, dont la position est donnée par 'numéro-position'. Les 'type-exception' possibles sont : FIXED POINT OVERFLOW, DECIMAL OVERFLOW, DIVIDE EXCEPTION, et EXPONENT OVERFLOW. Le type de donnée peut être différent de celui de la colonne ou du littéral incriminé dans le cas d'une conversion par DB2.

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 : Pour chaque expression en erreur, la variable indicateur est positionnée à -2, la donnée n'est pas modifiée. L'exécution continue et fournit les valeurs pour chaque colonne et expression correcte de la liste du SELECT externe. Si l'ordre est contrôlé par curseur, le curseur reste ouvert.

Réponse programmeur : Examiner l'expression pour laquelle s'est posé le problème. Analyser les données incriminées lors de la détection de l'erreur. Le problème peut être dépendant des données. Voir l'explication du code -405 pour les plages de valeurs des différents types de donnée.
 

Chapitre  1-5

CODES D'ERREUR


- 007 STATEMENT CONTAINS THE ILLEGAL CHARACTER caractère

Explication : Le caractère précisé est invalide sur les ordres SQL.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger la syntaxe et réexécuter l'ordre. Consulter la documentation « SQL Référence » pour connaître le jeu de caractères SQL utilisables.


-010 THE STRING CONSTANT BEGINNING chaîne IS NOT TERMINATED

Explication : L'ordre contient une constante chaîne, commançant par 'chaîne', qui n'est pas correctement terminée.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Ajouter l'apostrophe ou le guillemet délimiteur dans la chaîne indiquée.


- 060 INVALID type SPECIFICATION : spécification

Explication : Le 'type' est LENGTH ou SCALE et la 'spécification' contient la longueur ou l'échelle précisée. La longueur ou l'échelle doit être fournie par une constante nombre entier non signé, et la valeur doit être dans la plage du type de donnée. Cette erreur apparaît sur la fonction scalaire DECIMAL.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger l'ordre. Consulter la documentation « SQL Référence » pour connaître les règles de codification des longueurs et échelles.


-084 UNACCEPTABLE SQL STATEMENT

Explication : Cet ordre n'est pas acceptable par DB2, pour l'une des raisons suivantes :

•       Une tentative de PREPARE ou EXECUTE IMMEDIATE a été faite sur un ordre SQL qui ne peut pas être préparé; par exemple FETCH ou INCLUDE.
•       L'ordre SQL intégré n'est pas un ordre supporté .   par DB2.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Si la raison provient d'un ordre qui ne peut pas être préparé, le problème se situe au niveau du source de l'ordre SQL et non pas du programme d'application. Ainsi aucune action n'est nécessaire sauf si le source de l'ordre SQL est le programme d'application lui-même.
Si l'ordre SQL n'est pas supporté par DB2, retirer cet ordre et précompiler à nouveau.


-101 THE STATEMENT IS TOO LONG OR TOO COMPLEX

Explication : L'ordre ne peut pas être exécuté car il dépasse les limites du système en longueur ou en complexité.
Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Segmenter l'ordre en plusieurs ordres plus courts ou moins complexes.


-102 THE LENGTH 0F THE STRING CONSTANT BEGENNING chaîne IS GREATER THAN 254  CHARACTERS OR 124 GRAPHIC CHARACTERS
Explication : La constante chaîne commençant par 'chaîne' possède une longueur supérieure à 254 caractères ou 124 caractères graphiques. Les constantes chaînes de ce type ne peuvent être précisées que sur des affectations de variables hôtes.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : La fonction demandée n'est pas valide en interactif. Si l'erreur apparaît sur un ordre SQL intégré, le résultat désiré peut être obtenu en affectant la chaîne longue à une variable hôte et en substiuant cette variable au littéral sur l'ordre SQL.


-103  littéral IS AN INVALID NUMERIC LITERAL

Explication : Le littéral indiqué commence par un chiffre mais n'est pas un littéral numérique valide.

Action système : L'ordre ne peut être exécuté. Réponse programmeur : Corriger le littéral invalide.


-104 ILLEGAL SYMBOL lexème VALID SYMBOLS ARE liste-lexème

Explication : Une erreur de syntaxe dans l'ordre SQL a été détectée au 'lexème' précisé.
Une liste partielle des lexèmes valides est fournie par 'liste-lexème'. Cette liste assume la validité de l'ordre jusqu'à ce point et seuls les lexèmes possibles sont listés.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Examiner l'ordre à l'endroit du lexème spécifié.


-105 INVALID STRING

Explication : L'ordre comporte une chaîne invalide. Ce n'est ni une chaîne de caractères, ni une chaîne graphique.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Spécifier un format correct de chaîne: Pour une chaîne graphique, vérifier la paire de délimiteurs, le caractère G, et un nombre pair d'octets dans la chaîne.


Chapitre Les codes retour SQL 1-6

 

-107 THE NAME nom IS TOO LONG. MAXIMUM ALLOWABLE SIZE IS taille

Explication : Le 'nom' référencé est trop long.La longueur maximum permise pour les noms de ce type est indiquée par 'taille'.
Les noms suivants ne peuvent pas contenir plus de 18 caractères (ou 20, s'ils comportent les caractères d'échappement SQL) :

Colonnes SQL.
Tables SQL.
Vues SQL.
Index SQL
Alias SQL.
Synonymes SQL.

Les noms suivants comportent au maximum 8 caractères :

Qualificateurs de table.
Qualificateurs de vue.
Noms de membre de librairie précisés sur un
ordre INCLUDE.
Noms de storage group.
Noms de database.
Noms de tablespace. .
Plans d'application.
Noms de DBRM.
Noms de contrainte spécifiés sur un ordre
CREATE ou ALTER TABLE.

Les noms de variable hôte ne peuvent pas comporter plus de 64 caractères. Les numéros de série de volume sont limités à 6 caractères. Les labels ne peuvent pas dépasser 30 caractères.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Choisir un nom plus court pour l'objet.


-109 clause CLAUSE IS NOT PERMITTED

Explication : La clause indiquée n'est pas permise dans ce contexte. Un sous-sélect ne peut pas comporter de clause INTO. Un ordre CREATE VIEW ne peut pas comporter de clause INTO, ORDER BY ou FOR UPDATE. Un ordre SELECT imbriqué ne peut pas comporter de clause ORDER BY ou FOR UPDATE. Les ordres SELECT utilisés dans les déclarations de curseur ne peuvent pas comporter de clause INTO.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger l'ordre SQL.


-110 INVALID HEXADECIMAL LITERAL BEGINNING chaîne

Explication : Le littéral commençant par 'chaîne' contient des caractères qui ne sont pas des chiffres hexadécimaux.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger le littéral invalide.


-111 A COLUMN FUNCTION DOES NOT INCLUDE A COLUMN NAME

Explication : La spécification d'une fonction de colonne (AVG, MIN, MAX, ou SUM) est invalide car ces fonctions doivent comporter un nom de colonne comme opérande. Si le nom de colonne provient d'une vue, la colonne ne doit pas être dérivée d'une constante, d'une expression ou d'une fonction.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Un nom de colonne doit être spécifié comme opérande de la fonction de colonne.


-112 THE OPERANDOF A COLUMN FUNCTION IS ANOTHER COLUMN FUNCTION OR  DISTINCT FOLLOWED BY AN EXPRESSION

Explication : L'opérande d'une fonction de colonne est une autre fonction de colonne, ou le mot clé DISTINCT suivi par une expression. Les opérandes d'une fonction de colonne autorisés sont : les expressions ne comportant pas de fonction, ou DISTINCT suivi par une référence de colonne (pas d'expression).

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger la spécification de la fonction de colonne.


-113 INVALID CHARACTER FOUND IN NAME: nom

Explication : Le 'nom' spécifié comporte un caractère interdit dans les noms DB2. Les identificateurs délimiteurs courts ne peuvent pas contenir de caractère spécial.

Les noms contiennent exclusivement des caractères alphabétiques, numériques, ou nationaux (#, $, @), à moins que l'option KATAKANA, ou les caractères d'échappement soient utilisés. Le premier caractère est obligatoirement alphabétique ou national.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger le nom. Consulter la documentation « SQL Référence » pour les conventions de codification des noms.


Chapitre 1-7


-115 A PREDICATE IS INVALID BECAUSE THE COMPARISON OPERATOR opérateur IS   FOLLOWED BY A PARENTHESIZED LIST OR BY ANY OR ALL WITHOUT A  SUBQUERY.

Explication : Un opérateur simple de comparaison comme '>' ne doit pas être suivi d'une liste de valeurs. Les opérateurs ANY et ALL doivent être suivis par une sous-requête, et non pas par une expression ou une liste de valeurs.

Action système : L'ordre ne peut être exécuté. Réponse programmeur : Corriger l'ordre SQL.


-117 THE NUMBEROF INSERT VALUES IS NOT THE SAME AS THE NUMBER 0F OBJECT  COLUMNS
 
Explication : Le nombre de valeurs précisées sur la liste d'un ordre INSERT est différent du nombre de colonnes à mettre à jour.

Action système : L'ordre ne peut être exécuté. Aucune valeur n'est insérée dans la table.

Réponse programmeur : Corriger l'ordre SQL en précisant une valeur pour chaque colonne de mise à jour.


-118 THE OBJECT TABLE OR VIEW 0F THE INSERT, DELETE, OR UPDATE STATEMENT IS  ALSO IDENTIFIED IN A FROM CLAUSE

Explication : La table ou la vue spécifiée comme objet de mise à jour sur un ordre INSERT, DELETE, ou UPDATE, apparaît aussi dans la clause FROM d'une sous-requête imbriquée.

La table ou la vue ne peut pas être utilisée pour fournir des valeurs de mise à jour, ou pour qualifier des lignes à insérer, à modifier, ou à détruire.

Action système : L'ordre ne peut être exécuté. Aucune donnée n'est insérée, modifiée, ou supprimée.

Réponse programmeur : Cette codification n'est pas supportée par DB2. Méthode : utiliser une copie temporaire de la table ou de la vue et référencer cette copie dans la sous-requête.


-119 A COLUMN IDENTIFIED IN A HAVING CLAUSE IS NOT INCLUDED IN THE GROUP BY  CLAUSE

Explication : Une colonne identifiée dans une clause HAVING (éventuellement dans une fonction scalaire) n'apparaît pas dans la clause GROUP BY. Les colonnes spécifiées dans une clause HAVING doivent apparaître dans des fonctions de colonne ou être précisées dans la clause GROUP BY.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Cette codification n'est pas supportée par DB2. Corriger l'ordre SQL en respectant les règles de codification des clauses HAVING et GROUP BY.


-120 A WHERE CLAUSE OR SET CLAUSE INCLUDES A COLUMN FUNCTION OR A WHERE  CLAUSE REFERENCES A COLUMN nom-colonne WICH IS DERIVED FROM A COLUMN   FUNCTION OR EXPRESSION IN A VIEW DEFINITION

Explication : Une clause WHERE ou SET contient une fonction de colonne, ou une clause WHERE référence une colonne qui est dérivée d'une fonction -de colonne ou d'une expression dans la définition d'une vue.
Une fonction de colonne est autorisée dans une clause WHERE uniquement si elle apparaît dans une sous-requête ou dans une clause HAVING.

Action système : L'ordre ne peut être exécuté.

Note : L'information 'nom-colonne' peut ne pas être retournée en SQLCA en fonction de la nature de l'erreur.
Réponse programmeur : Cette codification n'est pas supportée par DB2. Corriger l'ordre SQL en tenant compte des restrictions applicables aux clauses WHERE et SET.


-121 THE COLUMN nom-colonne IS IDENTIFIED MORE THAN ONCE IN THE INSERT OR  UPDATE STATEMENT

Explication : Une même colonne 'nom-colonne' est précisée plus d'une fois, soit dans la liste des colonnes d'un ordre INSERT, soit dans la clause SET d'un ordre UPDATE.

Action système : L'ordre ne peut être exécuté. Aucune donnée n'est mise à jour.

Réponse programmeur : Corriger la syntaxe de l'ordre SQL de telle manière que chaque nom de colonne apparaisse une seule fois.


-122 A SELECT STATEMENT WITH NO GROUP BY CLAUSE CONTAINS A COLUMN NAME  AND A COLUMN FUNCTION IN THE SELECT CLAUSE OR A COLUMN NAME IS  CONTAINED IN THE SELECT CLAUSE BUT NOT IN THE GROUP BY CLAUSE

Explication : L'ordre SELECT contient une des trois erreurs suivantes :

•      L'ordre contient un nom de colonne et une fonction de colonne sur la clause SELECT, sans clause GROUP BY.
•    Un nom de colonne figure sur la clause SELECT (éventuellement dans une fonction scalaire) mais pas dans la clause GROUP BY.
•    Une colonne référencée dans une clause GROUP BY est une colonne de vue dérivée d'une constante, d'une expression, ou d'une fonction.

Action système : L'ordre ne peut être exécuté.


Chapitre 1-8

Réponse programmeur : Corriger la syntaxe de l'ordre SQL en respectant les contraintes d'utilisation de la clause GROUP BY.


-125 AN INTEGER IN THE ORDER BY CLAUSE DOES NOT IDENTIFY A COLUMN OF THE  RESULT

Explication : La clause ORDER BY contient un numéro de colonne qui ne figure pas dans la clause SELECT.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger la syntaxe de l'ordre SQL. Chaque numéro doit identifier une colonne de la table résultat.


-126 THE SELECT STATEMENT CONTAINS BOTH AN UPDATE CLAUSE AND AN ORDER BY  CLAUSE

Explication : L'ordre SELECT inclu dans la définition d'un curseur contient à la fois une clause UPDATE et une clause ORDER BY. La clause ORDER BY ne peut pas être utilisée pour un curseur permettant la mise à jour.

Action système : L'ordre ne peut être exécuté. Le curseur reste indéfini pour le programme.

Réponse programmeur : Cette fonction n'est pas supportée par DB2. Un curseur utilisé en mise à jour ne peut pas retrouver des lignes dans un ordre spécifique.


-127 DISTINCT IS SPECIFIED MORE THAN ONCE IN A SUBSELECT

Explication : Le mot-clé DISTINCT ne peut être utilisé qu'une seule fois dans un ordre SELECT ou dans une sous-requête.

Action système : L'ordre ne peut être exécuté.
Réponse programmeur : Cette fonction n'est pas supportée par DB2. Corriger l'ordre en tenant compte des contraintes d'utilisation du mot-clé DISTINCT.


-128 INVALID USE OF NULL IN A PREDICATE

Explication : L'utilisation du prédicat NULL n'est pas conforme aux règles de la syntaxe SQL.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Cette fonction n'est pas supportée par DB2. Corriger l'ordre en tenant compte des contraintes d'utilisation du prédicat NULL.


-129 THE STATEMENT CONTAINS TOO MANY TABLE NAMES

Explication : Un ordre SQL peut référencer au maximum 15 tables.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Eclater l'ordre en plusieurs morceaux comportant au plus 15 références. Le compteur comprend le nombre de tables de base pour chaque vue référencée sur la clause FROM.


- 131 STATEMENT WITH LIKE PREDICAT HAS INCOMPATIBLE DATA TYPES

Explication : Si la colonne à gauche de LIKE ou NOT LIKE est de type caractère, l'expression à droite doit être de type caractère, même remarque pour le type graphique.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Vérifier le type de donnée de chaque opérande.


- 132 A LIKE PREDICAT IS INVALID BECAUSE THE FIRST OPERANDE IS NOT A COLUMN  OR THE SECOND OPERAND IS NOT A STRING

Explication : Un prédicat LIKE est invalide car le premier opérande n'est pas un nom de colonne, ou le second opérande n'est pas une chaîne. Le premier opérande doit être un nom de colonne. La valeur du second opérande doit être une chaîne constante ou une variable.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Cette fonction n'est pas supportée par DB2. Corriger l'ordre en tenant compte des contraintes d'utilisation de LIKE.


-133 ACOLUMNFUNCTIONINASUBQUERY OF AN HAVING CLAUSE IS INVALID BECAUSE  IT INCLUDES AN EXPRESSION THAT APPLIES AN OPERATOR TO A CORRELATED  REFERENCE

Explication : Une fonction de colonne figurant dans une sous-requête d'une clause HAVING est invalide, car elle applique un opérateur à une référence corrélée. Une opération arithmétique ne peut être traitée sur une référence corrélée dans une sous-requête d'une clause HAVING.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger l'ordre en tenant compte des contraintes d'utilisation de la clause HAVING.


Chapitre  1-9

-134 IMPROPER USE OF LONG STRING COLUMN nom-colonne OR A HOST VARIABLE OF  MAXIMUM LENGTH GREATER THAN 254

Explication : Une colonne ou une host variable de ce type ne peut pas apparaître dans les clauses ORDER BY et GROUP BY, les sous-requêtes concaténées par UNION, les fonctions. SUBSTR est la seule fonction scalaire supportant les valeurs de chaînes longues, LIKE et NOT LIKE sont les seuls prédicats supportant ces données.

Action système : L'ordre ne peut être exécuté.

Note : L'information 'nom-colonne' peut ne pas être retournée en SQLCA en fonction de la nature de l'erreur et de la syntaxe de l'ordre.

Réponse programmeur : L'opération demandée n'est pas supportée par DB2. Se reporter aux contraintes de spécification et de manipulation des chaînes longues.


- 136 SORT CANNOT BE EXECUTED BECAUSE THE SORT KEY LENGTH IS GREATER THAN  4000 BYTES

Explication : Une clé de tri est dérivée d'une liste de colonnes spécifiées par le mot-clé DISTINCT, ou sur une clause ORDER BY ou GROUP BY.

La longueur interne de la clé de tri ne peut excéder 4000 octets.
Action système : L'ordre ne peut être exécuté.

Réponse programmeur : L'ordre doit être modifié de telle sorte que la longueur interne de la clé de tri ne dépasse pas 4000 octets. En général, cela signifie qu'une ou plusieurs colonnes doivent être otées de la clause ORDER BY ou GROUP BY, ou de la liste suivant le mot-clé DISTINCT.


-137 RESULT 0F CONCATENATION TOO LONG

Explication : Là longueur d'un résultat de concaténation dépasse 32764 octets (pour un opérande de type caractère), ou 16382 octets (pour un opérande de type graphique).

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger l'ordre pour que le résultat de concaténation n'excède pas la limite.


-138 THE SECOND OR THIRD ARGUMENT OF THE SUBSTR FUNCTION IS OUT OF RANGE

Explication : Le second argument de la fonction SUBSTR est inférieur à 1 ou supérieur à M. Le troisième argument est la constante 0 ou une expression de valeur inférieure à 0 ou supérieure à M-N+1.

M est la longueur du premier argument, s'il est de longueur fixe, ou M est la longueur maximum du premier argument, s'il est de longueur variable. N est la valeur du second argument.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Vérifier que les deuxième et troisième arguments de la fonction SUBSTR ont des valeurs en accord avec les règles énoncées ci-dessus.


-150 THE OBJECT OF THE INSERT, DELETE, OR UPDATE STATEMENT IS A VIEW FOR WICH  THE REQUESTED OPERATION IS NOT PERMITTED

Explication : La définition de la vue nommée sur un ordre INSERT, DELETE, ou UPDATE, interdit toute opération d'insertion, de modification, ou de suppression.

Les insertions dans une vue sont interdites, lorsque :

•        La définition de la vue contient une jointure, ou une clause GROUP BY ou HAVING.
•      La clause SELECT de la vue contient le mot-clé DISTINCT, une expression arithmétique, une expression de  chaîne, une fonction incorporée, ou une constante.
•       Deux ou plusieurs colonnes de la vue sont dérivées de la même colonne.
•      Une table sous-jacente de la vue contient une colonne qui n'a pas de valeur définie et qui n'est pas incluse  dans la vue.

Les modifications dans une vue sont interdites, lorsque :

•      La définition de la vue contient une jointure, ou une clause GROUP BY ou HAVING.
•      La clause SELECT de la vue contient le mot-clé DISTINCT, ou une fonction.

De plus, une colonne donnée d'une vue ne peut être modifiée si la colonne est dérivée d'une expression arithmétique, une constante, ou une colonne faisant partie d'un index partitionné.

Les suppressions dans une vue sont interdites, lorsque :

•      La définition de la vue contient une jointure, ou une clause GROUP BY ou HAVING.
•      La clause SELECT de la vue contient le mot-clé DISTINCT, ou une fonction incorporée.

Action système : L'ordre ne peut être exécuté. Aucune donnée n'est insérée, modifiée ou supprimée.

Réponse programmeur : La fonction demandée ne peut être traitée au travers de la vue. Se reporter aux contraintes liées aux opérations de mise à jour sur les vues.


-151 THE UPDATE STATEMENT IS INVALID BECAUSE THE CATALOG DESCRIPTION OF  COLUMN nom-colonne INDICATES THAT IT CANNOT BE UPDATED

Explication : La colonne spécifiée ne peut être mise à jour pour l'une des raisons suivantes :

•      La table objet de la mise à jour est partitionnée (elle réside dans un tablespace partitionné), et la colonne fait  partie de la clé de partition.
•      La table est une vue et la colonne spécifiée est définie comme ne pouvant pas être mise à jour.
•      La table objet est une table système.

Les valeurs des colonnes participant aux clés de partition ne peuvent être mises à jour.

Les colonnes individuelles d'une vue ne peuvent être mises à jour, pour les raisons suivantes :

•      La colonne est dérivée d'une fonction SQL, d'une expression arithmétique, ou d'une constante.
•      La colonne est définie dans une clé de partition pour une table partitionnée.
•      La colonne est définie pour une colonne d'une vue sous-jacente qui ne peut être modifiée.

Action système : L'ordre ne peut être exécuté. Aucune donnée n'est modifiée dans la table ou la vue.

Réponse programmeur : La fonction demandée n'est pas supportée par DB2. Se reporter aux contraintes liées aux opérations de mise à jour sur les colonnes de tables partitionnées et de vues.

Chapitre  1-10

-153 THE CREATE VIEW STATEMENT DOES NOT INCLUDE A REQUIRED COLUMN LIST

Explication : La liste des noms de colonne est obligatoire si la table résultat du SELECT possède des noms dupliqués, ou une colonne sans nom (dérivée d'une constante, d'une fonction, ou d'une expression).

Action système : L'ordre ne peut être exécuté. La vue n'est pas créée.

Réponse programmeur : Corriger l'ordre en fournissant une liste de noms pour les colonnes de la vue.


-154 THE CREATE VIEW FAILED BECAUSE THE VIEW DEFINITION CONTAINS A UNION, A  UNION ALL, OR A REMOTE OBJECT

Explication : La vue définie sur un ordre CREATE VIEW contient UNION ou UNION ALL, ou un objet remote. DB2 ne peut créer de vue contenant l'opération d'union ou un objet remote.

Action système : L'ordre ne peut être exécuté. La vue n'est pas créée.

Réponse programmeur : Se reporter aux contraintes liées à la définition des vues.


-156 THE STATEMENT DOES NOT IDENTIFY A TABLE

Explication : Les ordres ALTER TABLE, DROP TABLE, et LOCK TABLE ne s'appliquent que sur des objets table. Les index ne peuvent être définis que sur des tables.

Action système : L'ordre ne peut être exécuté. La vue ou l'objet remote spécifié n'est pas altéré, supprimé ou verrouillé, ou l'index n'est pas créé.

Réponse programmeur : Vérifier que le nom correct est spécifié dans l'ordre.


-157 ONLY TABLE NAME CAN BE SPECIFIED IN A FOREIGN KEY CLAUSE, nom-objet IS NOT  THE NAME OF A TABLE

Explication : L'objet indiqué est spécifié sur une clause FOREIGN KEY d'un ordre CREATE ou ALTER TABLE. Une clause FOREIGN KEY doit identifier une table.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger l'ordre afin de spécifier un nom de table sur la clause FOREIGN KEY.


-158 THE NUMBEROFCOLUMNS SPECIFIED FOR THE VIEW IS NOT THE SAME AS THE  NUMBER OF COLUMNS SPECIFIED BY THE SELECT CLAUSE

Explication : Le nombre de colonnes défini pour une vue par un ordre CREATE VIEW doit être identique au nombre d'éléments (noms de colonne, fonctions SQL, expressions, etc) identifié sur la clause AS SELECT.

Action système : L'ordre ne peut être exécuté. La vue n'est pas créée.

Réponse programmeur : Corriger la syntaxe de l'ordre afin de spécifier un nom de colonne pour chaque colonne de la vue à créer.


-159 DROP OR COMMENT ON lexème IDENTIFIES A(N) lexème RATHER THAN A(N) lexème

Explication : L'objet spécifié sur un ordre DROP VIEW, DROP ALIAS, ou COMMENT ON ALIAS identifie une table à la place d'une vue ou d'un alias.

Un ordre DROP VIEW ne peut s'appliquer que sur un objet vue. Un ordre DROP ALIAS ou COMMENT ON ALIAS ne peut s'appliquer que sur un objet alias. L'ordre DROP TABLE est obligatoire pour détruire un objet table. L'ordre COMMENT ON TABLE est obligatoire pour enregistrer un commentaire sur une table.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger l'ordre DROP VIEW, DROP ALIAS ou COMMENT ON ALIAS pour que le nom de la vue ou de l'alias soit spécifié correctement (avec le bon qualificateur). Si la destruction ou la documentation doit porter sur une table, utiliser l'ordre DROP TABLE ou COMMENT ON TABLE.


-160 THE WITH CHECK OPTION CANNOT BE USED FOR THE SPECIFIED VIEW

Explication : La clause WITH CHECK OPTION n'est pas applicable dans les cas suivants :

•      La vue est définie pour lecture uniquement (par exemple la vue est construite sur plusieurs tables ou vues).
•    L'ordre SELECT de la vue contient une sous-requête, une clause GROUP BY ou HAVING, ou le mot-clé  DISTINCT.

Action système : L'ordre ne peut être exécuté. La vue n'est pas créée.

Réponse programmeur : Se reporter aux règles d'utilisation de la clause WITH CHECK OPTION dans la définition d'une vue.


Chapitre  1-11


-161 THE INSERT OR UPDATE IS NOT ALLOWED BECAUSE A RESULTING ROW DOES NOT  SATISFY THE VIEW DEFINITION

Explication : La clause WITH CHECK OPTION s'applique à la vue impliquée dans un ordre INSERT ou UPDATE. En conséquence, toute tentative d'insertion ou de mise à jour de lignes dans la vue, est contrôlée pour assurer un résultat conforme à la définition de la vue.

Action système : L'ordre ne peut être exécuté. Aucune insertion ou mise à jour n'est traitée, et la vue et les tables sous-jacentes restent inchangées.

Réponse programmeur : Examiner la définition de la vue pour déterminer la raison du rejet de l'INSERT ou UPDATE. Le problème peut être dépendant des données.


-164 identifiant DOES NOT HAVE THE PRIVILEGE TO CREATE A VIEW WITH QUALIFICATION  autorisation ID

Explication : Un utilisateur reconnu par 'identifianf ne possède pas l'autorité nécessaire pour créer une vue préfixée par un qualificateur différent de son propre 'identifianf. La création de la vue pour l'utilisateur 'autorisation ID' est rejetée.

Action système : L'ordre ne peut être exécuté. La vue spécifiée n'est pas créée.

Réponse programmeur : Ne pas créer de vue pour un autre utlisateur. Seul un utilisateur de profile SYSADM peut créer des vues pour d'autres utilisateurs.


-170 THE NUMBEROF ARGUMENTS SPECIFIED FOR nom-fonction IS INVALID

Explication : Un ordre SQL utilise une fonction scalaire 'nom-fonction' pour laquelle le nombre d'arguments est incorrect.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger l'ordre SQL en respectant la syntaxe de la fonction scalaire.


-171 THE DATA TYPE, LENGTH, OR VALUE OF ARGUMENT numéro OF nom-fonction IS  INVALID

Explication : Le type de donnée, la longueur, ou la valeur d'un argument, identifié par 'numéro', est invalide pour la fonction scalaire 'nom-fonction'.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger l'ordre SQL en respectant la syntaxe de la fonction scalaire.


-180 THE STRING REPRESENTATION OF A    ^ DATETIME VALUE HAS INVALID SYNTAX

Explication : La chaîne représentant une valeur de type DATE ou TIME n'est pas conforme à la syntaxe du type de donnée.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Vérifier que la valeur respecte la syntaxe du type de donnée qu'elle représente.


-181 THE STRING REPRESENTATION OF A DATETIME VALUE IS NOT A VALID DATETIME  VALUE

Explication : La chaîne représentant une valeur de type DATE ou TIME ne respecte pas la plage des valeurs acceptables. Les plages de valeurs correctes sont les suivantes :

Type    Plage valeurs
Years     0001 à 9999
Months    1 à 12
Days
- mois 1,3,5,7,8,10,12  1 à 31
- mois 4,6,9,11   1 à 30
- mois 2, année bissextile 1 à 29
- mois 2, année non bissextile  1 à 28
Hours
- format USA   1 à 12
- format non USA  1 à 24
Minutes    0 à 59
Seconds    0 à 59
Microseconds    0 à 999999

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Vérifier que la valeur est dans la plage correcte.


-182 AN ARITHMETIC EXPRESSION WITH A DATETIME VALUE IS INVALID

Explication : L'expression arithmétique contient une utilisation impropre d'une valeur de type DATE ou TIME, ou d'un libellé de durée.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger l'expression arithmétique.


Chapitre Les codes retour SQL 1-12

 

-183 AN ARITHMETIC OPERATION ON A DATE OR TIMESTAMP HAS A RESULT THAT IS  NOT WITHIN THE VALID RANGE OF DATES

Explication : Le résultat d'une opération arithmétique est une date ou un horodatage qui est hors de la plage correcte (entre 0001-01-01 et 9999-12-31).

Action système : L'ordre ne peut être exécuté.

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, dans ce cas, il est nécessaire d'examiner les données en cours de traitement lors de la détection de l'erreur.


- 184 AN ARITHMETIC EXPRESSION WITH A DATETIME VALUE CONTAINS A PARAMETER  MARKER

Explication : L'expression arithmétique contient un paramètre de séparation utilisé de façon incorrecte dans une valeur de type DATE ou TIME.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger l'expression arithmétique.


-198 THE OPERAND OF THE PREPARE OR EXECUTE IMMEDIATE STATEMENT IS BLANK  OR EMPTY

Explication : L'opérande (host variable ou littéral chaîne) d'un ordre PREPARE ou EXECUTE IMMEDIATE est entièrement à blanc ou est une chaîne vide.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger la logique du programme pour que l'opérande de l'ordre PREPARE ou EXECUTE IMMEDIATE soit un ordre SQL valide:


-185 THE LOCAL FORMAT OPTION HAS BEEN USED WITH A DATE OR TIME AND NO  LOCAL EXIT HAS BEEN INSTALLED

Explication : L'option format local est utilisée alors qu'aucune routine de DATE ou TIME n'est installée.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Contacter le programmeur système responsable de l'installation de la routine de DATE/TIME.


-186 THE LOCAL DATE LENGTH OR LOCAL TIME LENGTH HAS BEEN INCREASED AND  EXECUTING PROGRAM RELIES ON THE OLD LENGTH

Explication : L'option format local est utilisée et DB2 s'aperçoit que la routine a été modifiée pour produire un format local plus grand.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Si l'ordre recevant cette erreur est intégré dans un programme, il est nécessaire d'exécuter un REBIND du plan. Si l'ordre est dynamique, il suffit de le réexécuter.


-187 A REFERENCE TO A CURRENT DATE/TIME SPECIAL REGISTER IS » '      INVALID  BECAUSE THE MVS TOD CLOCK IS BAD OR THE MVS PARMTZ IS OUTOF RANGE

Explication : DB2 a rencontré une valeur invalide de l'horloge TOD (time-of-day) au cours de l'utilisation des registres spéciaux CURRENT DATE, CURRENT TIME, CURRENT TIMESTAMP, ou CURRENT TIMEZONE. Si le registre utilisé est CURRENT TIMEZONE, cela signifie que le paramètre PARMTZ de MVS est en dehors de la plage des valeurs correctes.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Pour le registre CURRENT TIMEZONE, vérifier que le paramètre PARMTZ de MVS est compris entre -24 et +24 heures. Pour les autres registres, vérifier que l'horloge TOD a été initialisée correctement.


-199 ILLEGAL USE OF KEYWORD mot-clé. TOKEN liste-lexème WAS EXPECTED

Explication : Une erreur de syntaxe a été détectée sur l'ordre SQL à l'endroit de 'mot-clé'.
Une liste partielle des lexèmes valides est fournie par 'lisle-lexéme'. Cette liste assume la validité de l'ordre jusqu'à ce point, et seuls les lexèmes possibles sont listés.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Examiner l'ordre à l'endroit du mot-clé spécifié. Un caractère ':' ou un délimiteur SQL peut manquer.


-203 A REFERENCE TO COLUMN nom-colonne IS AMBIGUOUS

Explication : Deux ou plusieurs tables précisées dans la clause FROM de l'ordre contiennent des colonnes de même nom 'nom-colonne'. Le nom de colonne requiert une qualification supplémentaire précisant de qu'elle table il s'agit.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Qualifier le nom de la colonne ambiguë par un nom de table ou un nom de corrélation.


-204 nom IS AN UNDEFINED NAME

Explication : L'objet identifié par 'nom' n'est pas défini dans le sous-système DB2. Ce code s'applique à n'importe quel objet DB2.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Déterminer si l'objet est correctement précisé sur l'ordre SQL (avec les qualifiants obligatoires). Si la codification est correcte, s'assurer que l'objet existe dans le système, avant de réexécuter l'ordre.


Chapitre  1-13


- 205 nom-colonne IS NOT A COLUMN 0F TABLE nom-table

Explication : Aucune colonne de nom 'nom-colonne' n'existe dans la table ou la vue de nom 'nom-table'.
Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Vérifier que les noms de colonne et de table sont correctement spécifiés (avec les qualifiants obligatoires) sur l'ordre SQL.

- 208 THE ORDER BY CLAUSE IS INVALID BECAUSE COLUMN nom IS NOT PART OF THE  RESULT TABLE

Explication : L'ordre est invalide car la colonne de nom 'nom' précisée sur ia liste de la clause ORDER BY ne fait pas partie de la table résultante (elle ne figure pas sur la liste de la clause SELECT). Seules les colonnes apparaissant dans la table résultante peuvent être utilisées comme critères de tri.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger la syntaxe de l'ordre en ajoutant la colonne spécifiée à la table résultante, ou en la supprimant de la liste de la clause ORDER BY.


-206 nom-colonne IS NOT A COLUMN OF AN INSERTED TABLE, UPDATED TABLE, OR ANY  TABLE IDENTIFIED IN A FROM CLAUSE

Explication : Ce code est utilisé pour préciser les erreurs suivantes :

•      Sur un ordre INSERT ou UPDATE, la colonne précisée n'est pas une colonne de la table ou de la vue en  mise à jour.
•      Sur un ordre DELETE ou SELECT, la colonne précisée n'est pas une colonne des tables ou vues identifiées  sur la clause FROM.
•      Une référence est corrélée sur un GROUP BY.
•      Une référence qualifiée n'est pas résolue sur un HAVING.

Action système : L'ordre ne peut être exécuté. Aucune donnée n'est retrouvée, ou mise à jour.

Réponse programmeur : Vérifier que les noms de colonne et de table sont correctement spécifiés. Pour un ordre SELECT, vérifier que les tables à utiliser sont bien référencées sur la clause FROM.


-207 THE ORDER BY CLAUSE IS INVALID BECAUSE IT INCLUDES A COLUMN NAME BUT  IT APPLIES TO THE RESULT OF A UNION OR UNION ALL

Explication : La clause ORDER BY est invalide car des noms de colonnes sont précisées sur la liste de cette clause, et l'ordre comporte une sous-requête contenant l'opérateur UNION ou UNION ALL.
Lorsque la clause ORDER BY s'applique sur le résultat d'une opération UNION ou UNION ALL, des nombres entiers (et non pas des noms de colonnes) doivent être utilisés sur la liste de la clause ORDER BY pour identifier les colonnes de tri du résultat.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger l'ordre en remplaçant les noms de colonnes sur la clause ORDER BY par leurs identifiants numériques.


-219 THE REQUIRED EXPLANATION TABLE nom-table DOES NOT EXIST

Explication : L'ordre EXPLAIN suppose l'existence de la table PLAN_TABLE qui n'est pas définie comme table de base dans le sous-système DB2.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Déterminer si la table PLAN_TABLE existe. Si non, créer cette table, avant de réexécuter l'ordre EXPLAIN.


-220 THE COLUMN nom-colonne IN EXPLANATION TABLE nom-table IS NOT DEFINED  PROPERLY

Explication : Une erreur s'est prooduite lors de l'insertion d'une ligne dans la table PLAN_TABLE. Cette table possède une définition incorrecte pour l'une des raisons suivantes :
•      Une colonne est manquante.
•      Les colonnes sont définies dans un mauvais ordre.
•      La table contient une colonne supplémentaire.
•      Une colonne possède une mauvaise description de nom, de type de donnée, de longueur, ou de règle de  NULL.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger la définition de la table PLAN TABLE.


-221 "SET OF OPTIONAL COLUMNS" IN EXPLANATION TABLE nom-table IS INCOMPLETE.  OPTIONAL COLUMN nom-colonne IS MISSING

Explication : L'ordre EXPLAIN suppose une définition correcte de la table PLAN_TABLE. La colonne optionnelle indiquée n'est pas définie. La table PLAN_TABLE doit comporter aucune, ou les trois colonnes optionnelles (PREFETCH, COLUMN_FN_EVAL, MIXOPSEQ).

Action système : Aucune information EXPLAIN n'est générée.

Réponse programmeur : Corriger la définition de la table PLAN_TABLE en incluant les trois colonnes optionnelles, ou en supprimant les colonnes optionnelles déjà codées.

Chapitre 1-14


-301 THE VALUE OF INPUT HOST VARIABLE NUMBER numéro-position CANNOT BE USED AS  SPECIFIED BECAUSE OF ITS DATA TYPE

Explication : La variable hôte en entrée indiquée par numéro-position sur SOLDA, ne peut pas être utilisée comme spécifié parce que son type de donnée est incompatible avec la fonction demandée.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Vérifier que le type de donnée de la variables hôte est compatible avec la façon dont cette variable est utilisée.


-302 THE VALUE OF INPUT HOST VARIABLE NUMBER numéro-position IS INVALID OR TOO  LARGE FOR THE TARGET COLUMN

Explication : La variable hôte en entrée indiquée par numéro-position sur SQLDA, est invalide ou trop grande pour pouvoir alimenter la colonne correspondante de la table.
Les raisons possibles sont :

•       La colonne est définie comme chaîne et la variable hôte contient une chaîne qui est trop grande pour la colonne.
•       La colonne est définie numérique et la variable contient une valeur numérique trop grande pour la définition de la colonne.
•       La variable hôte est définie décimale mais contient une valeur invalide.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger le programme d'application. Vérifier le type de la colonne et la longueur de la valeur, ou le type de donnée et le contenu de la variable hôte numéro-position. S'assurer que la valeur de la variable cadrera avec la colonne, ou contiendra une valeur décimal correcte. Une donnée décimale valide est un nombre décimal condensé S/370.


-303 A VALUE CANNOT BEASSIGNEDTO OUTPUT HOST VARIABLE NUMBER numéro-position  BECAUSE THE DATA TYPES ARE NOT COMPARABLE

Explication : Un ordre FETCH ou SELECT sur une variable hôte en sortie, indiquée par numéro-position sur SOLDA, ne peut pas être traité car le type de donnée de la variable n'est pas compatible avec le type de donnée de l'élément de la liste du SELECT. La variable en sortie et l'élément correspondant de la liste du SELECT doivent entrer dans l'une des catégories suivantes :

•       Les deux valeurs doivent être des nombres.
•       Les deux valeurs doivent être des chaines de caractères.
•      Les deux valeurs doivent être des chaînes graphiques.
De plus, pour des valeurs date/time et timestamp, la variable hôte doit être une chaîne de caractères de longueur appropriée.

Action système : L'ordre FETCH ou SELECT ne peut être exécuté. Aucune donnée n'est extraite.

Réponse programmeur : Vérifier que les définitions de la table sont à jour, et que la variable hôte possède le bon type de donnée.


- 304 A VALUE WITH DATA TYPE type-donnée-1 CANNOT BE ASSIGNED TO A HOST  VARIABLE BECAUSE THE VALUE IS NOT WITHIN THE RANGE OF THE HOST   VARIABLE IN POSITION numéro-position WITH DATA TYPE type-donnée-2

Explication : Sur un ordre FETCH ou SELECT INTO, une host variable de type 'type-donnée-2 n'est pas assez grande pour accueillir une valeur extraite de type 'type-donnée-T. La host variable incriminée est identifiée par sa position 'numéro-position' à l'intérieur de la liste ou de la structure.

Action système : L'ordre ne peut être exécuté. Si l'ordre est un FETCH, le curseur reste toutefois ouvert.

Réponse programmeur : Vérifier que les définitions de la table sont en phase avec celles du programme, et que la host variable possède le bon type de donnée. Voir l'explication du code -405 pour les plages de valeurs des différents types de donnée.


- 305 THE NULL VALUE CANNOT BE ASSIGNED TO OUTPUT HOST VARIABLE NUMBER  numéro-position BECAUSE NO INDICATOR VARIABLE IS SPECIFIED

Explication : Une opération FETCH ou SELECT INTO extrait une valeur NULL, à placer dans une host variable identifiée par 'numéro-position' qui ne comporte pas de variable indicateur. Une variable indicateur est obligatoire pour toute expression pouvant retourner une valeur NULL.

Action système : L'ordre ne peut être exécuté. Aucune donnée n'est extraite.

Réponse programmeur : Examiner la définition de la table impliquée dans le FETCH ou SELECT INTO, et corriger le programme d'application en codant une variable indicateur pour chaque expression susceptible de présenter une valeur NULL.


- 309 A PREDICATE IS INVALID BECAUSE A REFERENCED HOST VARIABLE HAS THE NULL  VALUE

Explication : L'ordre ne peut être traité car une host variable apparaît dans un prédicat sous la forme "nom-colonne = host-variable" et possède la valeur NULL. Un tel prédicat n'est pas permis si la host variable contient la valeur NULL, même si la colonne peut contenir la valeur NULL.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Cette fonction n'est pas supportée par DB2. La seule utilisation possible est un prédicat de la forme "nom-colonne IS NULL".


Chapitre  1-15


-312 UNDEFINED OR UNUSABLE HOST VARIABLE nom-variable.

Explication : La host variable de nom 'nom-variable' apparaît sur un ordre SQL, mais aucune déclaration de variable sous ce nom n'existe dans le programme, ou les attributs sont incorrects pour l'usage spécifié.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Vérifier que le nom de la variable est codé proprement sur l'ordre SQL, que le programme contient une déclaration de cette variable, et que les attributs de cette variable sont compatibles avec son utilisation dans l'ordre SQL.


-313 THE NUMBER OF HOST VARIABLES SPECIFIED IS NOT EQUAL TO THE NUMBER OF  PARAMETER MARKERS

Explication : Le nombre de host variables précisé sur l'ordre EXECUTE ou OPEN est différent de celui des marques de paramètres apparaissant sur l'ordre SQL préparé.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger le programme pour que les nombres de host variables et de paramètres soient identiques.


-401 THE OPERANDS OF AN ARITHMETIC OR COMPARISON OPERATION ARE NOT  COMPARABLE

Explication : Une expression arithmétique apparaît sur un ordre SQL avec des opérandes numériques et non numériques, ou les opérandes d'une comparaison ne sont pas compatibles.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Contrôler les types de donnée de tous les opérandes en s'assurant qu'ils sont comparables et compatibles avec leur utilisation sur l'ordre.

Si tous les opérandes de l'ordre sont corrects et qu'une vue est utilisée, vérifier leur type dans la définition de la vue.


- 402 AN ARITHMETIC FUNCTION OR OPERATOR opérateur IS APPLIED TO CHARACTER OR  DATETIME DATA

Explication : Un opérande non numérique est précisé sur une fonction arithmétique ou un opérateur 'opérateur1.
Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Examiner et corriger la syntaxe de l'ordre SQL de telle manière que tous les opérandes de la fonction précisée ou de l'opérateur soient numériques.


- 404 THE UPDATE OR INSERT STATEMENT SPECIFIES A STRING THAT IS TOO LONG  nom-colonne

Explication : Un ordre INSERT ou UPDATE spécifie une valeur de longueur plus grande que la longueur maximum autorisée pour la colonne indiquée.

Note : 'nom-colonne' peut ne pas apparaître dans SQLCA, en fonction de la syntaxe de l'ordre.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Vérifier la longueur de la colonne et corriger le programme ou l'ordre SQL de façon à ce que la longueur de la chaîne n'excède pas la longueur maximum.


- 314 THE STATEMENT CONTAINS AN AMBIGUOUS HOST VARIABLE REFERENCE

Explication : Une host variable est définie plus d'une fois sous le même nom dans le programme, ce qui provoque une référence ambiguë sur l'ordre.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Rendre la host variable unique, ou utiliser les qualifications pour préciser quelle host variable doit être utilisée.


-405 THE NUMERIC LITERAL littéral CANNOT BE USED AS SPECIFIED BECAUSE IT IS OUT  OF RANGE


Explication : Le littéral numérique précisé est en dehors des plages de valeurs correctes, qui sont :
•       5.4E-79 à 7.2E+75 pour le type FLOAT,
•      -999999999999999 à +999999999999999 pour le type DECIMAL
•       -2147483648 à +2147483647 pour le type INTEGER,
•       -32768 à +32767 pour le type SMALLINT.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : La valeur du littéral doit être réduite à la taille appropriée du type de donnée.


- 406 A CALCULATED OR DERIVED NUMERIC VALUE IS NOT WITHIN THE RANGE OF ITS  OBJECT COLUMN

Explication : Une valeur dérivée ou calculée lors du traitement d'un ordre SQL est en dehors de la plage autorisée du type de donnée de la colonne objet.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Vérifier la longueur de la colonne et corriger le programme ou l'ordre SQL de façon à ce que la longueur de la chaîne n'excède pas la longueur maximum.


Chapitre  1-16


- 407 AN UPDATE OR INSERT VALUE IS NULL, BUT THE OBJECT COLUMN nom-colonne  CANNOT CONTAIN NULL VALUES

Explication : La valeur de mise à jour est NULL alors que la colonne réceptrice est définie MOT NULL dans la table.
Action système : L'ordre ne peut être exécuté.

Note : 'nom-colonne' peut ne pas apparaître dans SQLCA, en fonction de la syntaxe de l'ordre SQL en erreur.

Réponse programmeur : Examiner la définition de la table pour déterminer les colonnes possédant l'attribut NOT NULL, et corriger l'ordre SQL en conséquence.


- 408 AN UPDATE OR INSERT VALUE IS NOT COMPARABLE WITH THE DATATYPE OF ITS  OBJECT COLUMN nom-colonne

Explication : La valeur de mise à jour possède un type de donnée incompatible avec celui de la colonne à mettre à jour. Les deux types de donnée doivent être numériques, ou chaînes graphiques, ou dates et caractères, ou times et caractères, ou timestamps et caractères. Toutefois, les dates, times, et timestamps ne peuvent être assignés à une colonne de type caractère qui possède un FIELDPROC.

Action système : L'ordre ne peut être exécuté. Aucune donnée n'est mise à jour.

Réponse programmeur : Examiner la définition actuelle de la table objet de la mise à jour, et vérifier que la host variable ou le littéral assigné à la colonne précisée, possède le bon type de donnée.


-409 INVALID OPERAND OF A COUNT FUNCTION

Explication : L'opérande d'une fonction COUNT ne respecte pas la syntaxe SQL. Une erreur fréquente est : nom de colonne sans le mot-clé DISTINCT.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger l'ordre en respectant les règles d'utilisation de la fonction COUNT.

- 410 THE FLOATING POINT LITERAL littéral CONTAINS MORE THAN 30 CHARACTERS

Explication : Le littéral de type FLOAT spécifié est codé sur plus de 30 caractères (taille limite).

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger le littéral indiqué.


-411 THE CURRENT DATETIME, CURRENT SQLID OR USER KEYWORD CAN NOT  BE USED AS SPECIFIED

Explication : Le registre spécial CURRENT DATE/TIME, SQLID, pu USER apparaît dans un ordre SQL sous une forme incompatible avec le type de donnée utilisé :

•      CURRENT SQLID ou USER est du type CHAR(8).
•       CURRENT DATE est du type DATE.
•       CURRENT TIME est du type TIME.
•       CURRENT TIMESTAMP est du type TIMESTAMP.
•       CURRENT TIMEZONE est du type DECIMAL(6,0).

Le registre CURRENT SQLID est invalide sur un ordre SQL pour des données remote.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Examiner les attributs du type de donnée implicite pour déterminer l'erreur. Il peut être nécessaire de modifier la syntaxe de l'ordre SQL, ou la logique du programme.


-412 THE SELECT CLAUSE OF A SUBQUERY SPECIFIES MULTIPLE COLUMNS

Explication : Dans le contexte d'utilisation de la sous-requête, celle-ci ne peut avoir qu'une seule colonne précisée sur la clause SELECT.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger la syntaxe de l'ordre SQL en respectant les contraintes d'utilisation des sous-requêtes.


-414 THE NUMERIC OR DATETIME COLUMN nom-colonne IS SPECIFIED IN A LIKE PREDICAT

Explication : La colonne précisée sur le prédicat LIKE est du type numérique ou DATE/TIME, alors que seuls les types caractère ou chaîne graphique sont autorisés.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Examiner la définition de la colonne précisée, et vérifier que le nom de cette colonne est correcte. Les colonnes de type numérique ou DATE/TIME ne peuvent apparaître comme opérandes d'un prédicat LIKE ou NOT LIKE.


Chapitre  1-17


-415 THE CORRESPONDING COLUMNS, numéro-colonne, OF THE OPERANDS OF A UNION OR  A UNION ALL DO NOT HAVE COMPARABLE COLUMN DESCRIPTIONS

Explication : Les descriptions des colonnes des opérandes d'une opération UNION ou UNION ALL doivent être comparables. Les colonnes correspondant à la position 'numéro-colonne' ne respectent pas cette contrainte. Pour que ces colonnes soient comparables, elles doivent être du même type de donnée, et s'il existe une FIELDPROC, elle doit être la même pour toutes ces colonnes.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Contrôler les types de donnée pour les colonnes précisées, et corriger l'ordre UNION ou UNION ALL pour que les colonnes correspondantes soient comparables.


- 416 AN OPERAND OF UNION CONTAINS A LONG STRING COLUMN

Explication : L'ordre UNION ne peut être traité car les tables participant à l'opération d'union contiennent une colonne de chaîne longue (par exemple, colonne de type VARCHAR de longueur supérieure à 254 caractères). Les opérandes d'un ordre UNION ne peuvent pas être des colonnes de chaîne longue.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Cette fonction n'est pas supportée par DB2. Se reporter aux restrictions de manipulation des colonnes de chaîne longue.

-417 A STATEMENT STRING TO BE PREPARED INCLUDES PARAMETER MARKERS AS THE  OPERANDS OF THE SAME OPERATOR

Explication : La chaîne précisée comme objet d'un ordre PREPARE contient un prédicat ou une expression dans laquelle le paramètre de séparation est utilisé comme opérande du même opérateur (par exemple : ?>?), cette syntaxe n'est pas permise.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger la logique du programme pour que cette erreur de syntaxe disparaisse. Se reporter aux contraintes d'utilisation du paramètre de séparation des ordres SQL préparés.

-418 A STATEMENT STRING TO BE PREPARED CONTAINS AN INVALID USE OF  PARAMETER MARKERS

Explication : Les paramètres de séparation ne peuvent pas être utilisés sur la liste d'un ordre SELECT, comme seul argument d'une fonction scalaire, ou dans une opération de concaténation. Ils ne peuvent pas être utilisés dans une expression d'un ordre SQL EXECUTE IMMEDIATE.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger la logique du programme pour que cette erreur disparaisse. Se reporter aux contraintes d'utilisation du paramètre de séparation des ordres SQL préparés.


-419 THE DECIMAL DIVIDE OPERATION IS INVALID BECAUSE THE RESULT WOULD HAVE  A NEGATIVE SCALE

Explication : La division décimale est invalide car elle résulte en une échelle négative. La formule interne utilisée pour calculer l'échelle d'un résultat de division décimale est :

échelle résultat = 15-np+ns-ds,

avec 'np' : précision du numérateur, 'ns' : échelle du numérateur, et 'ds' : échelle du dénominateur.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Examiner la précision et l'échelle de toutes les colonnes participant à la division. Noter qu'une valeur INTEGER ou SMALLINT peut être convertie en DECIMAL pour ce calcul.


-421 THE OPERANDS OF A UNION OR UNION ALL DO NOT HAVE THE SAME NUMBER OF  COLUMNS

Explication : Les opérandes d'un ordre UNION ou UNION ALL doivent avoir le même nombre de colonnes.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger l'ordre SQL pour que le nombre de colonnes soit identique sur chaque opérande.


-501 THE CURSOR IDENTIFIED IN A FETCH OR CLOSE STATEMENT IS NOT OPEN

Explication : Le programme d'application tente d'exécuter un ordre FETCH ou CLOSE sur un curseur, alors que celui-ci n'est pas ouvert.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Rechercher un code retour SQL précédent qui a pu fermer le curseur. Les opérations de COMMIT et ROLLBACK ferment tous les curseurs actifs. Les codes retour -404, -652, -679, -901, -904, -909, -910, -911 et -913 forcent la fermeture des curseurs. Si aucun code retour précédent n'a été émis, corriger la logique du programme en s'assurant que le curseur est ouvert lors de l'exécution de l'ordre FETCH ou CLOSE.


-502 THE CURSOR IDENTIFIED IN AN OPEN STATEMENT IS ALREADY OPEN

Explication : Le programme d'application tente d'ouvrir un curseur déjà ouvert.

Action système : L'ordre ne peut être exécuté. Le curseur reste inchangé, il n'est pas réouvert.


Réponse programmeur : Corriger la logique du programme en s'assurant qu'il n'essaie pas d'exécuter un ordre OPEN alors que le curseur est déjà ouvert.


Chapitre 1-18


- 503 A COLUMN CANNOT BE UPDATED BECAUSE IT IS NOT IDENTIFIED IN THE .   -  UPDATE CLAUSE OF THE SELECT STATEMENT OF THE CURSOR

Explication : Le programme d'application tente une mise à jour par curseur d'une colonne de table non identifiée dans la clause FOR UPDATE OF de la déclaration du curseur. Toute colonne devant être mise à jour doit être déclarée dans la clause FOR UPDATE OF.

Action système : L'ordre ne peut être exécuté. Aucune donnée n'est mise à jour dans la table.

Réponse programmeur : Corriger le programme. Si la colonne doit être mise à jour, ajouter son nom dans la clause FOR UPDATE OF de la déclaration du curseur.


-504 THE CURSOR NAME nom-curseur IS NOTDEFINED

Explication : Le curseur de nom 'nom-curseur1 n'est pas déclaré dans le programme d'application avant d'être référencé.

Action système : L'ordre ne peut être exécuté.
Réponse programmeur : Vérifier le programme. La déclaration du curseur doit apparaître physiquement dans le programme avant tout ordre y faisant référence.


- 507 THE CURSOR IDENTIFIED IN THE UPDATE OR DELETE STATEMENT IS NOT OPEN

Explication : Le programme tente d'exécuter un ordre UPDATE ou DELETE WHERE CURRENT OF sur un curseur non ouvert.

Action système : L'ordre ne peut être exécuté. Aucune mise à jour ou suppression n'est effectuée.
Réponse programmeur : Rechercher un code retour SQL précédent qui a pu fermer le curseur. Les codes retour-404, -652, -679, -901, -904, -909, -910, -911 et -913 forcent la fermeture des curseurs. Après fermeture du curseur, tout ordre FETCH ou CLOSE reçoit le code -501, tout ordre UPDATE ou DELETE reçoit le code -507. Corriger la logique du programme en s'assurant que le curseur est bien ouvert lors de l'exécution d'un ordre UPDATE ou DELETE.


-508 THE CURSOR IDENTIFIED IN THE UPDATE OR DELETE STATEMENT IS NOT  POSITIONNED ON A ROW
Explication : Le programme tente d'exécuter un ordre UPDATE ou DELETE WHERE CURRENT OF sur un curseur alors que celui-ci n'est pas positionné sur une ligne de la table. Le curseur doit être positionné avant toute tentative de mise à jour ou suppression.

Note : Le curseur ne reste pas positionné sur une ligne si celle-ci est détruite ou si une colonne index de cette ligne est modifiée par un autre curseur dans le même programme d'application.

Action système : L'ordre ne peut être exécuté. Aucune mise à jour ou suppression n'est effectuée.

Réponse programmeur : Corriger la logique du programme en s'assurant que le curseur est positionné correctement sur la ligne désirée avant toute opération d'UPDATE ou DELETE. Le curseur n'est pas positionné si le FETCH précédent a émis le code +100.


- 509 THE TABLE IDENTIFIED IN THE UPDATE OR DELETE STATEMENT IS NOT THE SAME  TABLE DESIGNATED BY THE CURSOR

Explication : Le programme tente d'exécuter un ordre UPDATE ou DELETE WHERE CURRENT OF sur un nom de table qui ne correspond pas au nom désigné dans la déclaration du curseur.

Action système : L'ordre ne peut être exécuté. Aucune mise à jour ou suppression n'est effectuée.

Réponse programmeur : Corriger le programme en s'assurant que les noms de table identifiés dans les ordres UPDATE, DELETE et DECLARE CURSOR sont identiques.


-510 THE TABLE DESIGNATED BY THE CURSOR OF THE UPDATE OR DELETE STATEMENT  CANNOT BE MODIFIED

Explication : Le programme tente d'exécuter un ordre UPDATE ou DELETE WHERE CURRENT OF sur une table ou une vue qui ne peut être mise à jour. Ceci se produit pour un DELETE sur une vue read-only, ou pour un UPDATE sur un curseur non défini avec la clause FOR UPDATE OF.

Action système : L'ordre ne peut être exécuté. Aucune mise à jour ou suppression n'est effectuée.

Réponse programmeur : La demande d'UPDATE ou DELETE ne peut être traitée. Se référer aux restrictions pour les opérations UPDATE et DELETE sur les vues.


- 511 THE FOR UPDATE CLAUSE CANNOT BE SPECIFIED BECAUSE THE TABLE  DESIGNATED BY THE CURSOR CANNOT BE MODIFIED

Explication : La table résultante d'un ordre SELECT ne peut être mise à jour. Causes possibles : la clause FROM de l'ordre SELECT précise plusieurs tables ou vues; la liste du SELECT contient une fonction ou le mot-clé DISTINCT; l'ordre contient la clause ORDER BY, GROUP BY ou HAVING; la vue précisée dans la clause FROM ne peut être mise à jour.

Action système : L'ordre ne peut être exécuté. Le curseur reste indéfini pour le programme.
Réponse programmeur : Les mises à jour ne peuvent être traitées sur la table résultante précisée. Se référer aux restrictions pour les opérations UPDATE sur les vues.


Chapitre 1-19


- 530 THE INSERT OR UPDATE VALUE OF FOREIGN KEY nom-contrainte IS INVALID

Explication : Une opération UPDATE ou INSERT tente de placer une valeur dans une clé étrangère qui n'existe pas comme valeur de clé primaire dans la table parent.

Lorsqu'une ligne est insérée dans une table dépendante, la valeur insérée dans la clé étrangère doit exister en tant que valeur de clé primaire pour une ligne de la table parent associée.
Lorsqu'une valeur de clé étrangère est modifiée, cette valeur doit exister en tant que valeur de clé primaire pour une ligne de la table parent associée.

Action système : L'ordre UPDATE ou INSERT ne peut être exécuté. La table n'est pas modifiée.

Réponse programmeur : Examiner d'abord les valeurs de la clé étrangère, puis les comparer avec les valeurs de la clé primaire de la table parent afin de déterminer la cause du problème.


- 531 THE PRIMARY KEY IN A PARENT ROW CANNOT BE UPDATED BECAUSE IT HAS ONE  OR MORE DEPENDENT ROWS IN A RELATIONSHIP nom-contrainte

Explication : Une opération UPDATE tente de modifier la clé primaire d'une ligne alors que celle-ci possède des lignes dépendantes associées.
La valeur de clé primaire d'une ligne parent ne peut pas être modifiée si la ligne parent possède des lignes dépendantes.

Action système : L'ordre UPDATE ne peut être exécuté. La table n'est pas modifiée.

Réponse programmeur : Examiner la clé primaire de la table à mettre à jour et la clé étrangère de la table dépendante afin de déterminer si la valeur de la clé primaire peut être modifiée. Si cet examen n'est pas concluant, vérifier le contenu des deux tables pour déterminer la cause du problème.


- 532 THE RELATIONSHIP nom-contrainte RESTRICTS THE DELETION OF ROW WITH RIO  X'numéro-rid

Explication : Une opération DELETE tente de détruire une ligne parent et toutes les lignes associées des tables descendantes, alors qu'une règle de suppression RESTRICT a été spécifiée sur une des tab-les descendantes.

Une ligne de la table ne peut être détruite car elle possède une dépendance dans une relation avec règle de RESTRICT ou CASCADE envers une ligne qui est dépendante dans une relation avec une règle RESTRICT.

Action système : L'ordre DELETE ne peut être exécuté. La table n'est pas modifiée.

Réponse programmeur : Examiner la règle de suppression de toutes les tables descendantes pour déterminer la cause du problème. Les tables impliquées peuvent être déterminées grâce au nom de la contrainte de référence 'nom-contrainte'. La ligne descendante en cause est identifiée par son 'numéro-rid.


-533 INVALID MULTIPLE-ROW INSERT

Explication : Une opération INSERT avec sous-requête tente d'insérer des lignes multiples dans une table auto-référencée.

La sous-requête d'une opération INSERT doit au plus retourner une seule ligne de données.

Action système : L'ordre INSERT ne peut être exécuté. Le contenu de la table reste inchangé.

Réponse programmeur : Examiner les conditions de recherche de la sous-requête en s'assurant qu'au plus une ligne est sélectionnée.


- 534 THE PRIMARY KEY CANNOT BE UPDATED BECAUSE OF MULTIPLE-ROW UPDATE

Explication : Une opération UPDATE tente de modifier une clé primaire sur des lignes multiples.
Un ordre UPDATE modifiant une clé primaire ne peut pas être utilisé pour modifier plus d'une ligne de la table.

Action système : L'ordre UPDATE ne peut être exécuté. Le contenu de la table reste inchangé.

Réponse programmeur : Examiner les conditions de recherche de l'ordre UPDATE en s'assurant qu'au plus une ligne est sélectionnée pour la mise à jour.


- 535 INVALID UPDATE OR DELETE WITH WHERE CURRENT OF

Explication : Une opération UPDATE avec WHERE CURRENT OF ne peut être utilisée pour modifier une clé primaire, ou une opération DELETE avec WHERE CURRENT OF ne peut être utilisée pour une suppression dans une table auto-référencée.

Action système : L'ordre UPDATE ou DELETE ne peut être exécuté. Le contenu de la table reste inchangé.

Réponse programmeur : Ne pas modifier une clé primaire par l'intermédiaire de WHERE CURRENT OF d'un ordre UPDATE. Ne pas détruire à partir d'une table auto-référencée par l'intermédiaire de WHERE CURRENT OF d'un ordre DELETE.


Chapitre  1-20


- 536 THE DELETE STATEMENT IS INVALID BECAUSE TABLE nom-table CAN BE AFFECTED  BY THE OPERATION


Explication : Une opération DELETE est tentée sur la table mentionnée, qui est référencée dans une sous-requête.

Si T est la table objet du DELETE, la table mentionnée est l'une des suivantes :

•       Une table dépendante de T dans une relation à règle de destruction CASCADE ou SET NULL,
•       Une table dépendante d'une autre table dans une relation à règle de destruction CASCADE ou SET NULL, pour laquelle les suppressions dans T entrainent une suppression en cascade.

Action système : L'ordre DELETE ne peut être exécuté. Le contenu de la table reste inchangé.

Réponse programmeur : Ne pas référencer une table dans la sous-requête d'un ordre DELETE lorsque cette table peut être affectée par l'ordre DELETE.


- 537 THE PRIMARY KEY OR FOREIGN KEY CLAUSE IDENTIFIES COLUMN nom-colonne  MORE THAN ONCE

Explication : La colonne 'nom-colonne' apparaît plus d'une fois dans la clause PRIMARY KEY ou FOREIGN KEY.
Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger l'ordre pour spécifier des noms uniques pour chaque colonne.


- 538 FOREIGN KEY nom DOES NOT CONFORM TO THE DESCRIPTION 0F THE PRIMARY KEY  OF TABLE nom-table

Explication : La définition de la clé étrangère n'est pas conforme à celle de la clé primaire de la table mentionnée. Les clés ne possèdent pas le même nombre de colonnes, ou leurs descriptions ne sont pas identiques (même type de donnée, même attribut de longueur, même procédure FIELDPROC). Le 'nom1 correspond au nom de la contrainte précisée sur la clause FOREIGN KEY, ou le cas échéant, au nom de la première colonne précisée dans la clause.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger l'ordre pour que les descriptions soient conformes.


- 539 TABLE nom-table DOES NOT HAVE A PRIMARY KEY

Explication : La table mentionnée, nommée comme parerçt dans une clause FOREIGN KEY, ne peut être définie comme parent car elle ne possède pas de clé primaire.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Corriger l'ordre pour que la table, nommée comme parent dans la clause FOREIGN KEY, référence une table avec clé primaire, ou définir une clé primaire pour la table à désigner parent.


- 540 THE DEFINITION OF TABLE nom-table IS INCOMPLETE BECAUSE IT DOES NOT HAVE A  PRIMARY INDEX

Explication : La référence à la table mentionnée est invalide, car celle-ci possède une clé primaire mais pas d'index primaire. La référence est faite dans une clause FOREIGN KEY, ou dans un ordre du SQL LMD.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Définir un index primaire sur la table, avant de la référencer.


- 541 FOREIGN KEY nom IS INVALID BECAUSE IT IS A DUPLICATE REFERENTIAL  CONSTRAINT

Explication : Une contrainte référentielle ne peut être définie, car la clause FOREIGN KEY identifie la même clé étrangère et la même table parent qu'une contrainte déjà existante. Le 'nom' correspond au nom de la contrainte spécifiée sur la clause FOREIGN KEY, ou le cas échéant, au nom de la première colonne mentionnée dans la clause.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Enlever la contrainte référentielle dupliquée de l'ordre.


- 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.


- 551 identifiant DOES NOT HAVE THE PRIVILEGE TO PERFORM OPERATION opération ON  OBJECT nom-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-objef 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.

Chapitre Les codes retour SQL 1-21

-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 'nom1 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.


- 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, SUBTACTION, 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.


- 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. RIO 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.


Chapitre 1-22

- 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).


- 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-lignes sur un ordre SELECT doit être géré par un curseur.


- 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é. Aucupe 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.


- 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.


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

Explication : Le précompilateur SQL place un 'horodatage-2 dans le DBRM et un 'horodatage-T 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.


- 904 UNSUCCESSFUL EXECUTION CAUSED BY AN UNAVAILABLE RESOURCE. REASON  code-raison, TYPE OF RESOURCE type-ressource, AND RESOURCE NAME nom-ressource

Explication : L'ordre SQL ne peut être exécuté du fait que la ressource 'nom-ressource' de type 'fype-ressource' est indisponible pour la raison indiquée par 'code-raison'.

Action système : L'ordre ne peut être exécuté.

Réponse programmeur : Vérifier l'identité de la ressource indisponible. La raison d'indisponibilité figure dans la documentation « DB2 Codes ».

Chapitre  1-23


- 905 UNSUCCESSFUL EXECUTION DUE TO RESOURCE LIMIT SEING EXCEEDED, •     RESOURCE NAME = nom-ressource LIMIT = limite-1 CPU SECONDS (limite-2 SERVICE   UNITS)  DERIVED FROM source-limite

Explication : L'exécution d'un ordre SQL est interrompue par un dépassement de limite de ressource.

Le nom de la ressource pour laquelle la limite est dépassée est 'nom-ressource'. C'est aussi le nom de la colonne de la table de spécification des limites des ressources. La limite dépassée en secondes CPU est 'limite-T et en unités de service