Partage via


Classe d’erreur TABLE_OR_VIEW_NOT_FOUND

SQLSTATE : 42P01

La table ou la vue <relationName> est introuvable. Vérifiez l’orthographe et l’exactitude du schéma et du catalogue.

Si vous n’avez pas qualifié le nom avec un schéma, vérifiez la sortie current_schema() ou qualifiez le nom avec le schéma et le catalogue appropriés.

Pour tolérer l’erreur lors de la suppression, utilisez DROP VIEW IF EXISTS ou DROP TABLE IF EXISTS.

Paramètres

  • relationName : nom de la relation spécifiée (table ou vue) introuvable.

Explication

Les tables et les vues persistantes se composent d’un nom en trois parties : <catalog>.<schema>.<relation>. Si vous ne spécifiez pas les trois parties du nom, celui-ci est implicitement complété à l’aide du catalogue ou du schéma actuel. Cela est similaire à la façon dont le répertoire de travail de votre système de fichiers influence les fichiers que vous pouvez voir, sauf si vous spécifiez entièrement le chemin d’accès.

Les vues temporaires ou les expressions de table communes (CTE) existent uniquement dans la session ou la requête, et ne doivent jamais être qualifiées.

La raison la plus courante pour laquelle une table ou une vue est introuvable est la suivante :

  • L’objet n’existe pas.
  • Le nom, le schéma ou le catalogue de l’objet a été mal orthographié.
  • L’objet ne se trouve pas dans le schéma actuel.
  • L’utilisateur n’a pas accès à l’objet et ne peut donc pas le voir.

Limitation des risques

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

  • Avez-vous mal orthographié le nom de la table, de la vue, du schéma ou du catalogue ?

    Corrigez l’orthographe du nom.

  • N’avez-vous pas entièrement qualifié le nom, faisant que le résultat de VALUES current_schema() ne correspond pas au nom qualifié de la table ou de la vue ?

    Qualifiez explicitement le relationName avec son schéma et son catalogue, ou émettez une commande USE SCHEMA pour définir le schéma implicite souhaité.

  • Avez-vous référencé une vue temporaire d’une session précédente, expirée ou différente ?

    Recréez la vue temporaire à l’aide de CREATE TEMPORARY VIEW <relationName> … ou basculez vers une vue permanente.

  • Avez-vous référencé une expression de table commune (CTE) située en dehors de l’étendue ?

    Déplacez la définition de l’objet CTE vers la requête la plus à l’extérieur. Il s’agit du début de l’instruction. Il est donc visible partout dans l’instruction.

  • Voulez-vous émettre une instruction DDL, telle que « DROP TABLE » au cas où l’objet existerait ?

    Émettez l’instruction à l’aide de la clause IF EXISTS, par exemple : DROP TABLE <relationName> IF EXISTS.

  • Savez-vous que l’objet existe, mais vous ne pouvez pas le voir dans SHOW TABLE ?

    Contactez votre administrateur pour obtenir l’accès à la table. Vous aurez peut-être aussi besoin d’accéder au schéma et au catalogue.

  • Vous ne comprenez pas la raison pour laquelle vous ne pouvez pas résoudre la table ou la vue ?

    Reportez-vous à Résolution des tables et des vues pour obtenir une description détaillée de la résolution des noms.

Exemples

-- The table is located in othercat.someschema
> SELECT count(*) FROM t;
 [TABLE_OR_VIEW_NOT_FOUND] The table or view `t` cannot be found.

> VALUES current_schema();
 default

-- Change the current schema
> USE SCHEMA othercat.someschema;
> SELECT count(*) FROM T;
 1

-- Alternatively qualify the table
> SELECT count(*) FROM othercat.someschema.t;
 1

-- A reference to a CTE in the wrong scope:
> SELECT count(1) FROM (WITH v(c1) AS (VALUES (1)) VALUES(2)) AS t(c1), v;
 [TABLE_OR_VIEW_NOT_FOUND] The table or view `v` cannot be found.

-- Move the CTE to top level
> WITH v(c1) AS (VALUES (1))
  SELECT count(1) FROM VALUES(2) AS t(c1), v;
 1

-- Dropping a non existing view
> DROP VIEW v;
 [TABLE_OR_VIEW_NOT_FOUND] The table or view `v` cannot be found.

> DROP VIEW IF EXISTS v;