Classe d’erreur TABLE_OR_VIEW_NOT_FOUND
Impossible de trouver la table ou la vue <relationName>
. Vérifiez l’orthographe et la correction 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 SI EXISTE ou DROP TABLE SI EXISTE.
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, elle est implicitement terminée à l’aide du catalogue actuel 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 de ne pas trouver de table ou d’affichage est la suivante :
- L’objet n’existe pas.
- Le nom de l’objet, le schéma ou le catalogue a été mal orthographié.
- L’objet n’est pas situé dans le schéma actuel.
- L’utilisateur n’a pas accès à l’objet et ne peut donc pas le voir.
Atténuation
L’atténuation de l’erreur dépend de la cause :
Avez-vous orthographié incorrectement la table ou la vue, le schéma ou le nom du catalogue ?
Corrigez l’orthographe.
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 commandeUSE 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 l’affichage 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. C'est le début de la déclaration, donc elle est visible partout dans la déclaration.
Voulez-vous émettre une instruction DDL, telle que 'DROP TABLE' juste en cas d’existence de l’objet ?
Émettez la phrase à l’aide de la clause
IF EXISTS
, telle que :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 devrez peut-être également inclure l’accès 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 au tableau et consultez la résolution 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;