Dela via


TABLE_OR_VIEW_NOT_FOUND felklass

SQLSTATE: 42P01

Det går inte att hitta tabellen eller vyn <relationName>. Kontrollera stavningen och korrektheten i schemat och katalogen.

Om du inte kvalificerade namnet med ett schema, verifiera resultatet av current_schema() eller kvalificera namnet med rätt schema och katalog.

För att tolerera fel vid borttagning, använd DROP VIEW IF EXISTS eller DROP TABLE IF EXISTS.

Parametrar

  • relationName: Namnet på den angivna relationen (tabell eller vy) som inte kan hittas.

Förklaring

Beständiga tabeller och vyer består av tre namndelar: <catalog>.<schema>.<relation>. Om du inte anger alla tre delarna av namnet slutförs det implicit med den aktuella katalogen eller det aktuella schemat. Detta liknar hur arbetskatalogen i filsystemet påverkar vilka filer du kan se, såvida du inte helt anger sökvägen.

Tillfälliga vyer eller vanliga tabelluttryck (CTE) finns bara i sessionen eller frågan och får aldrig kvalificeras.

Den vanligaste orsaken till att du inte hittar en tabell eller vy är:

  • Objektet finns helt enkelt inte.
  • Objektnamnet, schemat eller katalogen var felstavat.
  • Objektet finns inte i det aktuella schemat.
  • Användaren har ingen åtkomst till objektet och kan därför inte se det.

Förmildrande omständighet

Åtgärdandet av felet beror på orsaken.

  • Stavade du tabellen eller vyn, schemat eller katalognamnet felaktigt?

    Korrigera stavningen.

  • Har du inte fullständigt kvalificerat namnet och resultatet av VALUES current_schema() matchar inte det kvalificerade namnet på tabellen eller vyn?

    Kvalificera uttryckligen relationName med dess schema och katalog, eller utfärda ett USE SCHEMA kommando för att ange önskat implicit schema.

  • Har du använt en tillfällig vy, men den var i en tidigare, utgången eller annan session?

    Återskapa den tillfälliga vyn med hjälp av CREATE TEMPORARY VIEW <relationName> …eller växla till med hjälp av en permanent vy.

  • Refererade du till ett vanligt tabelluttryck (CTE), men det ligger utanför omfånget?

    Flytta definitionen av CTE till den yttersta frågan. Det är början på uttalandet, så det visas överallt i uttalandet.

  • Vill du utfärda en DDL-instruktion, till exempel "DROP TABLE" ifall objektet skulle finnas?

    Utfärda uttalandet med hjälp av IF EXISTS-satsen, till exempel: DROP TABLE <relationName> IF EXISTS.

  • Vet du att objektet finns, men du kan inte se det i SHOW TABLE?

    Kontakta administratören för att få åtkomst till den tilldelade tabellen. Detta kan också behöva inkludera åtkomst till schemat och katalogen.

  • Det är oklart varför du inte kan lösa tabellen eller vyn?

    Hänvisa till tabell och resolution för en detaljerad beskrivning av namnuppslagning.

Exempel

-- 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;