Archives de catégorie : SQLCODE

CODE RETOUR -525

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

Explication
L’un des éléments suivants :

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

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

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

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

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

SQLSTATE
51015

CODE RETOUR -519

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

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

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

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

SQLSTATE
24506

CODE RETOUR -518

THE EXECUTE STATEMENT DOES NOT IDENTIFY A VALID PREPARED STATEMENT

Explication
L’une des conditions suivantes existe :

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

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

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

  • Une instruction SELECT.
  • Une instruction ASSOCIATE LOCATORS.

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

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

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

SQLSTATE
07003

CODE RETOUR -517

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

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

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

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

SQLSTATE
07005

CODE RETOUR -516

THE DESCRIBE STATEMENT DOES NOT SPECIFY A PREPARED STATEMENT

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

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

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

SQLSTATE
26501

CODE RETOUR -514

THE CURSOR cursor-name IS NOT IN A PREPARED STATE

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

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

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

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

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

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

SQLSTATE
26501

CODE RETOUR -513

INVALID USE OF alias-name

Explication
L’objet indiqué par alias-name peut être le nom d’un alias en cours de création ou le nom d’un alias utilisé dans un contexte invalide. Un alias ne peut pas être défini sur un autre alias sur le même serveur.

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

Réponse du programmeur
Modifiez l’instruction SQL pour faire référence au nom d’un objet d’un type pris en charge.

SQLSTATE
42924

CODE RETOUR -512

STATEMENT REFERENCE TO REMOTE OBJECT IS INVALID

Explication
L’une des conditions suivantes existe :

  • La déclaration fait référence à plusieurs emplacements.
  • Une instruction avec une référence distante est EXPLAINÉE (EXPLAINED) soit par une instruction EXPLAIN dynamique, soit par l’option EXPLAIN(YES).
  • Un alias est mal utilisé.
  • Un nom en trois parties est implicitement ou explicitement utilisé dans une instruction qui n’est pas prise en charge par les protocoles privés Db2.
  • Un nom en trois parties est implicitement ou explicitement utilisé dans une instruction déclenchée.
  • Une instruction PREPARE contient une clause ATTRIBUTES. Ceci n’est pas pris en charge par les protocoles privés Db2.
  • Un nom en trois parties avec une référence distante n’est pas autorisé dans le corps d’une fonction SQL.
  • Un nom en trois parties avec une référence distante est spécifié dans une instruction TRANSFER OWNERSHIP.

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

Réponse du programmeur
Si l’objet ne peut pas être éliminé de manière significative de l’instruction, consultez votre administrateur de base de données pour d’autres moyens d’obtenir les données requises.

Si la référence d’objet distant se trouve dans une instruction SQL déclenchée, vous pouvez à la place appeler une fonction définie par l’utilisateur ou une procédure stockée à partir du déclencheur et accéder à l’objet distant à partir de la fonction ou de la procédure stockée.

SQLSTATE
56023

CODE RETOUR -500

THE IDENTIFIED CURSOR WAS CLOSED WHEN THE CONNECTION WAS DESTROYED

Explication
L’instruction FETCH, UPDATE, DELETE ou CLOSE identifie un curseur fermé qui a été défini avec l’option WITH HOLD. Le curseur a été fermé lorsque la connexion dont il dépendait a été détruite lors d’une opération de validation. La connexion a été détruite car le processus d’application l’a placée dans l’état libéré ou le plan d’application était lié à l’option DISCONNECT(AUTOMATIC).

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

Réponse du programmeur
Effectuez l’une des actions suivantes :

  • Si vous souhaitez que le curseur soit fermé, modifiez le programme d’application afin que le curseur ne soit pas référencé à l’état fermé.
  • Si vous voulez que le curseur soit ouvert et que la connexion ait été placée dans l’état validé par le programme d’application, modifiez le programme de sorte que la connexion ne soit pas placée dans l’état validé tant que le curseur n’est pas explicitement fermé.
  • Si vous voulez que le curseur soit ouvert et que la connexion a été placée dans l’état libéré suite à l’option DISCONNECT(AUTOMATIC), relisez le plan à l’aide de DISCONNECT(CONDITIONAL).

Corrigez l’erreur dans l’application, relisez le plan et soumettez à nouveau le travail.

SQLSTATE
24501

CODE RETOUR -499

CURSOR cursor-name HAS ALREADY BEEN ASSIGNED TO THIS OR ANOTHER RESULT SET FROM PROCEDURE procedure-name.

Explication
Une tentative a été faite pour affecter un curseur à un jeu de résultats à l’aide de l’instruction SQL ALLOCATE CURSOR et l’un des cas suivants s’applique :

  • La variable de localisation de l’ensemble de résultats spécifiée dans l’instruction ALLOCATE CURSOR a été précédemment affectée au curseur cursor-name.
  • Le curseur cursor-name spécifié dans l’instruction ALLOCATE CURSOR a été précédemment affecté à un jeu de résultats à partir de la procédure stockée procedure-name.

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

Réponse du programmeur
Déterminez si l’ensemble de résultats cible nommé dans l’instruction ALLOCATE CURSOR a déjà été affecté à un curseur.

Si le jeu de résultats a été précédemment affecté au curseur cursor-name , choisissez un autre jeu de résultats cible ou appelez à nouveau la procédure stockée procedure-name et réexécutez les instructions ASSOCIATE LOCATOR et ALLOCATE CURSOR.

Si le jeu de résultats n’a pas été précédemment affecté à un curseur, le curseur cursor-name spécifié dans l’instruction ALLOCATE CURSOR a été précédemment affecté à un jeu de résultats à partir de la procédure stockée procedure-name. Vous ne pouvez pas affecter le curseur cursor-name à un autre jeu de résultats, vous devez donc spécifier un nom de curseur différent dans l’instruction ALLOCATE CURSOR.

Corrigez les instructions de sorte que la syntaxe exacte utilisée pour spécifier le nom de la procédure sur l’instruction CALL soit la même que celle sur ASSOCIATE LOCATOR et/ou DESCRIBE PROCEDURE. Si un nom non qualifié est utilisé pour CALL la procédure, le nom en une partie doit également être utilisé sur les autres instructions. Si l’instruction CALL est faite avec un nom en trois parties et que le serveur actuel est le même que l’emplacement dans le nom en trois parties, la procédure ASSOCIATE LOCATOR ou DESCRIBE peut omettre l’emplacement.

SQLSTATE
24516