Archives de catégorie : SQLCODE

CODE RETOUR -586

THE TOTAL LENGTH OF THE CURRENT PATH SPECIAL REGISTER CANNOT EXCEED 2048 CHARACTERS

Explication
Le registre spécial CURRENT PATH est défini comme un VARCHAR (2048). Le contenu de la chaîne comprend chaque nom de schéma délimité par des guillemets doubles et séparé du nom de schéma suivant par une virgule. La longueur totale de la chaîne de tous les noms de schéma dans CURRENT PATH ne peut pas dépasser 2048 caractères. Une instruction SET PATH provoquant ce message dépasserait cette limite.

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

Réponse du programmeur
Supprimez les noms de schéma pour réduire la longueur totale afin qu’elle corresponde à la longueur maximale de 2 048 caractères. Si tous les noms de schéma sont requis, il peut être nécessaire de consolider certaines fonctions définies par l’utilisateur afin que moins de noms de schéma soient requis pour le CURRENT PATH.

SQLSTATE
42907

CODE RETOUR -585

THE COLLECTION collection-id APPEARS MORE THAN ONCE IN THE SET special-register STATEMENT

Explication
L’instruction SET pour le registre spécial special-register inclut collection-id plus d’une fois.

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

Réponse du programmeur
Supprimez les occurrences en double de collection-id de l’instruction SET pour le registre spécial.

SQLSTATE
42732

CODE RETOUR -584

INVALID USE OF NULL OR DEFAULT

Explication
Le mot clé NULL ou DEFAULT n’est pas valide comme spécifié. L’une des situations d’erreur suivantes s’est produite :

  • Le mot clé NULL a été utilisé dans la clause USING source-table de l’instruction MERGE, mais le mot clé NULL n’a pas été explicitement converti en un type de données pris en charge.
  • Dans une instruction d’affectation SET, DEFAULT a été affecté à une variable autre qu’une variable globale.
  • Une instruction CREATE VARIABLE a été utilisée pour définir une variable globale en tant que type de tableau. La constante DEFAULT ou la clause special-register DEFAULT a été spécifiée dans l’instruction CREATE VARIABLE. Seul DEFAULT NULL est autorisé.
  • Le mot clé DEFAULT a été spécifié comme valeur source pour une variable de transition dans une instruction d’affectation SET qui affecte des valeurs à plusieurs cibles, et soit toutes les cibles n’étaient pas des variables de transition, soit toutes les valeurs source n’étaient pas spécifiées avec le DEFAULT mot-clé.

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

Réponse de l’utilisateur
Effectuez l’une des actions suivantes :

  • Spécifiez le mot clé NULL dans une expression CAST lorsque vous utilisez NULL dans la clause USING VALUES de l’instruction MERGE.
  • N’affectez DEFAULT à aucune variable autre qu’une variable globale.
  • Dans une instruction CREATE VARIABLE utilisée pour définir une variable globale en tant que type tableau, n’affectez pas la constante DEFAULT ou le special-register DEFAULT à la variable globale.
  • N’affectez pas DEFAULT à une variable de transition dans une instruction d’affectation SET qui affecte des valeurs à plusieurs cibles si toutes les cibles ne sont pas des variables de transition ou si toutes les valeurs source ne sont pas spécifiées comme mot clé DEFAULT. Remplacez l’instruction d’affectation unique par des instructions d’affectation distinctes.

SQLSTATE
42608

CODE RETOUR -583

THE USE OF FUNCTION OR EXPRESSION name IS INVALID BECAUSE IT IS NOT DETERMINISTIC OR HAS AN EXTERNAL ACTION

Explication
La fonction name est défini comme une fonction non déterministe ou une fonction avec une action externe, ou l’expression name est défini comme une expression non déterministe. Ce type de fonction ou d’expression n’est pas pris en charge dans le contexte dans lequel il est utilisé. Les contextes dans lesquels ceux-ci ne sont pas valides sont :

  • Dans l’expression précédant le premier mot-clé WHEN dans une expression simple.
  • Dans la clause WHERE du fullselect dans une instruction CREATE VIEW si l’OPTION WITH CHECK est spécifiée.
  • Dans une expression d’une clause ORDER BY
  • Dans une expression-clé d’une définition d’index
  • Dans une expression d’une clause GROUP BY
  • Dans une expression qui génère la valeur d’un index pour un tableau
  • Dans une clause OFFSET ou FETCH FIRST
  • Dans une row-value-expressionsi l’opérateur de comparaison est <, <=, > ou >=

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

Réponse du programmeur
Si l’utilisation d’une fonction ou d’une expression non déterministe ou d’action externe n’était pas prévue, substituez une fonction ou une expression sans ces caractéristiques. Si le comportement associé à la fonction ou à l’expression d’action non déterministe ou externe est intentionnel, utilisez la forme alternative des déclarations qui rendent cette intention explicite.

  • Au lieu d’une simple clause, utilisez la clause-lorsque recherchée correspondante où la fonction ou l’expression serait spécifiée dans chaque condition de recherche.
  • Supprimez l’OPTION WITH CHECK de l’instruction CREATE VIEW.
  • Supprimez la fonction ou l’expression de la clause ORDER BY. Si la colonne fait partie du jeu de résultats de la requête, remplacez l’expression dans la clause ORDER BY par la forme simple-integer ou simple-column-name de la clé de tri.
  • Supprimez la fonction ou l’expression de la clause GROUP BY.
  • Supprimez l’expression qui génère la valeur d’un index pour un tableau.
  • Supprimez l’expression de la clause OFFSET ou FETCH FIRST.
  • Modifiez l’opérateur de comparaison dans row-value-expression ou supprimez la comparaison avec row-value-expression.

SQLSTATE
42845

CODE RETOUR -582

THE SEARCH-CONDITION IN A SEARCHED-WHEN-CLAUSE OF A CASE IS NOT VALID IN THE CONTEXT IN WHICH IT WAS SPECIFIED. THE SEARCH CONDITION CONTAINS A QUANTIFIED PREDICATE OR AN IN PREDICATE THAT INCLUDES A FULLSELECT, AND THESE ARE NOT ALLOWED IN THE SPECIFIED CONTEXT.

Explication
La condition de recherche SEARCH-CONDITION dans une clause recherchée SEARCHED-WHEN-CLAUSE spécifie un prédicat quantifié, un prédicat IN ou un prédicat EXISTS, mais n’est pas autorisée. Cependant, un prédicat IN est autorisé dans une liste de sélection ou une clause VALUES si ce prédicat IN inclut explicitement une liste d’expressions.

La condition de recherche SEARCH-CONDITION dans une clause recherchée SEARCHED-WHEN-CLAUSE spécifie un prédicat quantifié ou un prédicat IN qui inclut un fullselect. Une spécification CASE qui inclut l’un ou l’autre de ces éléments ne peut pas être utilisée dans les contextes suivants :

  • Une liste SELECT
  • Une clause VALUES d’une instruction INSERT ou MERGE
  • Une clause SET ou d’affectation d’une instruction UPDATE, MERGE ou DELETE
  • Le côté droit d’un SET ou d’une instruction d’affectation
  • Un masque de colonne ou une définition d’autorisation de ligne

La condition de recherche SEARCH-CONDITION dans une clause recherchée SEARCHED-WHEN-CLAUSE a spécifié un prédicat EXISTS. Une spécification CASE qui inclut un prédicat EXISTS ne peut pas être utilisée dans les contextes suivants :

  • Une clause VALUES d’une instruction INSERT ou MERGE
  • Le côté droit d’un SET ou d’une instruction d’affectation
  • Le diagnostic-string-expression  d’une instruction SIGNAL
  • Une clause ORDER BY ou une clause GROUP BY

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

Réponse du programmeur
Corrigez les expressions de résultat afin qu’elles soient compatibles.

SQLSTATE
42625

CODE RETOUR -581

THE DATA TYPES OF THE RESULT-EXPRESSIONS OF A CASE EXPRESSION ARE NOT COMPATIBLE

Explication
Il y a une expression CASE dans l’instruction qui a des RESULT-EXPRESSIONS (expressions suivant les mots clés THEN et ELSE) qui ne sont pas compatibles. Le type de données des RESULT-EXPRESSIONS peut être incompatible car les types de données de résultat de la condition CASE ne sont pas tous :

  • caractère
  • graphique
  • numérique
  • Date
  • temps
  • timestamp
  • chaîne binaire
  • type défini par l’utilisateur

S’ils sont encodés en Unicode, les types de données caractères et graphiques sont toutefois compatibles.

Une valeur de tableau avec un type de tableau défini par l’utilisateur ne peut être affectée qu’à une variable de tableau définie comme le même type de tableau défini par l’utilisateur. Les règles d’affectation d’une valeur de tableau sans type de tableau défini par l’utilisateur à une variable de tableau dépendent de l’instruction qui spécifie l’affectation. Voir Affectations de type de tableau pour plus d’informations.

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

Réponse du programmeur
Corrigez les RESULT-EXPRESSIONS afin qu’elles soient compatibles.

SQLSTATE
42804

CODE RETOUR -580

THE RESULT-EXPRESSIONS OF A CASE EXPRESSION CANNOT ALL BE NULL

Explication
Il y a une expression CASE dans l’instruction qui a toutes les result-expressions (expressions suivant les mots clés THEN et ELSE) codées avec le mot clé NULL.

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

Réponse du programmeur
Modifiez l’expression CASE pour inclure au moins une result-expressions avec un mot-clé autre que NULL.

SQLSTATE
42625

CODE RETOUR -579

object-type object-name ATTEMPTED TO READ DATA WHEN THE DEFINITION OF THE FUNCTION OR PROCEDURE DID NOT SPECIFY THIS ACTION

Explication
L’environnement actuel n’autorise pas les instructions SQL qui lisent les données. L’une des situations suivantes s’est produite :

  • Une fonction définie par l’utilisateur ou une procédure stockée object-name a été invoquée et a tenté de lire des données, mais la fonction ou la procédure a été définie sans l’option READS SQL DATA ou MODIFIES SQL DATA.
  • Une fonction ou une procédure définie avec CONTAINS SQL ou NO SQL a tenté d’appeler une autre fonction ou procédure définie avec READS SQL DATA.

Dans un environnement de fonctions et de procédures imbriquées, l’option SQL en vigueur est la plus restrictive qui a été spécifiée dans la hiérarchie imbriquée de fonctions et de procédures. L’option d’accès aux données SQL en effet ne permet pas la lecture des données.

Action du système
L’instruction SQL a échoué.

Réponse du programmeur
Utilisez une instruction ALTER pour modifier la définition de la fonction ou de la procédure afin d’autoriser les instructions qui lisent des données, ou supprimez l’instruction SQL défaillante de la fonction ou de la procédure externe.

SQLSTATE
38004

CODE RETOUR -578

THE RETURN STATEMENT WAS NOT EXECUTED FOR SQL FUNCTION function-name.

Explication
La fonction SQL a atteint la fin du corps de la routine sans exécuter d’instruction RETURN.

function-name
Le nom de la fonction.

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

Réponse de l’utilisateur
Ajoutez une instruction RETURN au corps de la routine de fonction et réessayez la demande.

SQLSTATE
2F005

CODE RETOUR -577

object-type object-name ATTEMPTED TO MODIFY DATA WHEN THE DEFINITION OF THE FUNCTION OR PROCEDURE DID NOT SPECIFY THIS ACTION

Explication
L’environnement actuel n’autorise pas les instructions SQL qui modifient les données. L’une des situations suivantes s’est produite :

  • Une fonction définie par l’utilisateur ou une procédure stockée object-name a été invoquée et a tenté de modifier des données, mais la fonction ou la procédure a été définie sans l’option MODIFIES SQL.
  • Une fonction définie par l’utilisateur ou une procédure stockée object-name a été invoquée et a tenté d’exécuter une instruction de définition de données, mais la fonction ou la procédure a été définie sans l’option MODIFIES SQL.
  • Une fonction ou procédure définie avec READS SQL DATA, CONTAINS SQL ou NO SQL a tenté d’appeler une autre fonction ou procédure définie avec MODIFIES SQL DATA.
  • Une fonction définie par l’utilisateur ou une procédure stockée object-name a été invoquée et a tenté d’utiliser une expression NEXT VALUE. Cependant, la fonction ou la procédure a été définie sans l’option MODIFIES SQL DATA.

Dans un environnement de fonctions et de procédures imbriquées, l’option SQL en vigueur est la plus restrictive qui a été spécifiée dans la hiérarchie imbriquée de fonctions et de procédures. L’option d’accès aux données SQL en effet ne permet pas de modifier les données.

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

Réponse du programmeur
Utilisez une instruction ALTER pour modifier la définition de la fonction ou de la procédure afin d’autoriser les instructions qui modifient les données, ou supprimez l’instruction SQL défaillante de la fonction ou de la procédure externe.

SQLSTATE
38002