Partage via


Classe d’erreur UNRESOLVED_COLUMN

SQLSTATE : 42703

Impossible de résoudre un paramètre de colonne, de variable ou de routine portant le nom <objectName> .

Cette classe d'erreurs comporte les classes d'erreurs dérivées suivantes.

WITHOUT_SUGGESTION

Paramètres

  • objectName : nom de la colonne ou du paramètre qui ne peut pas être résolu.

WITH_SUGGESTION

Faisiez-vous allusion à l’une des suivantes ? [<proposal>]

Paramètres

  • objectName : nom de la colonne ou du paramètre qui ne peut pas être résolu.
  • proposal : liste séparée par des virgules de candidats potentiels.

Explication

Azure Databricks déclenche cette erreur chaque fois qu’il lui est impossible d’identifier un identificateur dans un contexte où il attend une colonne, un alias de colonne ou un paramètre de fonction.

Les causes de cette erreur peuvent être multiples :

  • Faute d’orthographe dans le nom de la colonne ou le nom du paramètre.
  • Vous vouliez en fait spécifier un littéral de chaîne, et non un identificateur.
  • La colonne a été renommée ou supprimée à l’aide de ALTER TABLE
  • La colonne n’a pas été incluse dans la liste de sélection d’une sous-requête.
  • La colonne a été renommée à l’aide de l’alias de table ou de l’alias de colonne.
  • La référence de colonne est corrélée et vous n’avez pas spécifié LATERAL.
  • La référence de colonne est à un objet qui n’est pas visible, car il apparaît précédemment dans la même liste de sélection ou dans une sous-requête scalaire.

Limitation des risques

Le mode d’atténuation de l’erreur dépend de sa cause :

  • L’orthographe du nom et des qualificateurs est-elle incorrecte ?

    Comparez les colonnes proposées dans objectList et corrigez l’orthographe.

  • Vouliez-vous plutôt spécifier un littéral de chaîne ?

    Placez le littéral entre guillemets simples, et non des accents graves.

  • La colonne a-t-elle été omise d’une sous-requête ?

    Ajoutez la colonne à la liste de sélection de la sous-requête.

  • Faites-vous référence à une colonne dans une relation antérieure de la même clause ?

    Ajoutez le mot-clé LATERAL avant la sous-requête avec la colonne non résolue. La prise en charge des requêtes corrélées est limitée. Vous devrez peut-être réécrire (dé-corréler) la requête.

  • La raison pour laquelle la colonne ou le champ ne peut pas être résolu n’est pas claire

    Pour obtenir une description détaillée de la résolution de noms, consultez Résolution de colonnes, de champs, de paramètres et de variables.

Exemples

> CREATE OR REPLACE TEMPORARY VIEW colors(cyan, magenta, yellow) AS VALUES(10, 20, 5);

-- The column reference has been misspelled
> SELECT jello FROM colors;
  [UNRESOLVED_COLUMN.WITH_SUGGESTION] A column or function parameter with name `jello` cannot be resolved.
  Did you mean one of the following? [`colors`.`cyan`, `colors`.`yellow`, `colors`.`magenta`]

-- Correct the spelling
> SELECT yellow FROM colors;
 5

-- The qualifier has been misspelled
> SELECT color.yellow FROM colors;
 [UNRESOLVED_COLUMN.WITH_SUGGESTION] A column or function parameter with name `color`.`yellow` cannot be resolved.
 Did you mean one of the following? [`colors`.`cyan`, `colors`.`yellow`, `colors`.`magenta`]

-- Correct the spelling
> SELECT colors.yellow FROM colors;
 5

-- Forgot to quote a literal
> SELECT hello;
 [UNRESOLVED_COLUMN.WITHOUT_SUGGESTION] A column or function parameter with name `hello` cannot be resolved.

-- Use single quotes
> SELECT 'hello';

-- Used the wrong quotes for a literal
> SELECT `hello`;
 [UNRESOLVED_COLUMN.WITHOUT_SUGGESTION] A column or function parameter with name `hello` cannot be resolved.

-- Use single quotes instead
> SELECT 'hello';

-- Column "got lost" in a subquery.
> SELECT cyan, magenta, yellow
    FROM (SELECT cyan, magenta
            FROM colors) AS c;
 [UNRESOLVED_COLUMN.WITH_SUGGESTION] A column or function parameter with name `yellow` cannot be resolved.
 Did you mean one of the following? [`c`.`cyan`, `c`.`magenta`]

-- Add the missing column
> SELECT cyan, magenta, yellow
    FROM (SELECT cyan, magenta, yellow
            FROM colors) AS c;
 10   20    5

-- Columns got renamed in the table alias
> SELECT cyan, magenta, yellow
    FROM (SELECT cyan, magenta, yellow
            FROM colors) AS c(c, m, y);
 [UNRESOLVED_COLUMN.WITH_SUGGESTION] A column or function parameter with name `cyan` cannot be resolved.
 Did you mean one of the following? [`c`.`c`, `c`.`m`, `c`.`y`];

-- Adjust the names
> SELECT c, m, y
    FROM (SELECT cyan, magenta, yellow
            FROM colors) AS c(c, m, y);
 10   20    5

-- A correlated reference
> SELECT * FROM colors, (SELECT cyan + magenta + yellow AS total_use);
 [UNRESOLVED_COLUMN.WITHOUT_SUGGESTION] A column or function parameter with name `cyan` cannot be resolved.

-- Add LATERAL to permit correation
> SELECT * FROM colors, LATERAL(SELECT cyan + magenta + yellow AS total_use);
 10    20     5    35

-- Or de-correlate
> SELECT *, cyan + magenta + yellow AS total_use FROM colors;
 10    20     5    35

-- A misspelled parameter name
> CREATE OR REPLACE FUNCTION plus(a INT, b INT) RETURNS INT RETURN arg1 + arg2;
 [UNRESOLVED_COLUMN.WITH_SUGGESTION] A column or function parameter with name `arg1` cannot be resolved.
 Did you mean one of the following? [`plus`.`a`, `plus`.`b`]

-- Fix the names
> CREATE OR REPLACE FUNCTION plus(a INT, b INT) RETURNS INT RETURN a + b;
> SELECT plus(1, 2);
 3