Freigeben über


TABLE_OR_VIEW_NOT_FOUND-Fehlerklasse

SQLSTATE: 42P01

Die Tabelle oder Ansicht <relationName> kann nicht gefunden werden. Überprüfen Sie die Schreibweise und Korrektheit des Schemas und des Katalogs.

Wenn Sie den Namen nicht mit einem Schema qualifiziert haben, überprüfen Sie die current_schema()-Ausgabe, oder qualifizieren Sie den Namen mit dem richtigen Schema und Katalog.

Verwenden Sie DROP VIEW IF EXISTS oder DROP TABLE IF EXISTS, um den Fehler beim Löschen zu tolerieren.

Parameter

  • relationName: Der Name der angegebenen Beziehung (Tabelle oder Sicht), die nicht gefunden werden kann.

Erklärung

Persistente Tabellen und Sichten bestehen aus drei Namensteilen: <catalog>.<schema>.<relation>. Wenn Sie nicht alle drei Teile des Namens angeben, wird er implizit mithilfe des aktuellen Katalogs oder des aktuellen Schemas ergänzt. Dies ähnelt der Art und Weise, wie das Arbeitsverzeichnis Ihres Dateisystems beeinflusst, welche Dateien angezeigt werden, wenn Sie den Pfad nicht vollständig angeben.

Temporäre Sichten oder allgemeine Tabellenausdrücke (Common Table Expressions, CTE) sind nur innerhalb der Sitzung oder Abfrage vorhanden und dürfen nie qualifiziert werden.

Die häufigsten Gründe dafür, dass eine Tabelle oder Sicht nicht gefunden wird, sind:

  • Das Objekt ist einfach nicht vorhanden.
  • Der Objektname, das Schema oder der Katalog wurde falsch geschrieben.
  • Das Objekt befindet sich nicht im aktuellen Schema.
  • Der Benutzer hat keinen Zugriff auf das Objekt und kann es daher nicht sehen.

Lösung

Die Minderung des Fehlers hängt von der Ursache ab:

  • Haben Sie den Namen der Tabelle, Sicht, des Schemas oder Katalogs falsch geschrieben?

    Korrigieren Sie die Schreibweise.

  • Haben Sie den Namen nicht vollständig qualifiziert, und das Ergebnis von VALUES current_schema() stimmt nicht mit dem qualifizierten Namen der Tabelle oder Sicht überein?

    Qualifizieren Sie den relationName explizit mit seinem Schema und Katalog, oder geben Sie einen USE SCHEMA-Befehl aus, um das gewünschte implizite Schema festzulegen.

  • Haben Sie auf eine temporäre Sicht verwiesen, die sich allerdings in einer früheren, abgelaufenen oder anderen Sitzung befand?

    Erstellen Sie die temporäre Sicht mit CREATE TEMPORARY VIEW <relationName> … neu, oder wechseln Sie zur Verwendung einer permanenten Sicht.

  • Haben Sie auf einen allgemeinen Tabellenausdruck (Common Table Expression, CTE) verwiesen, der jedoch außerhalb des Gültigkeitsbereichs liegt?

    Verschieben Sie die Definition des CTE in die äußerste Abfrage. Dies ist der Anfang der Anweisung, sodass sie überall innerhalb der Anweisung sichtbar ist.

  • Möchten Sie eine DDL-Anweisung ausgeben, z. B. „DROP TABLE“, falls das Objekt vorhanden ist?

    Geben Sie die Anweisung mithilfe der IF EXISTS-Klausel aus, z. B. DROP TABLE <relationName> IF EXISTS.

  • Wissen Sie, dass das Objekt vorhanden ist, aber Sie können es in SHOW TABLE nicht sehen?

    Wenden Sie sich an Ihren Administrator, um Zugriff auf die Tabelle zu erhalten. Dieser muss möglicherweise auch den Zugriff auf das Schema und den Katalog umfassen.

  • Es ist unklar, warum Sie die Tabelle oder Sicht nicht auflösen können?

    Eine ausführliche Beschreibung der Namensauflösung finden Sie unter Tabellen- und Sichtauflösung.

Beispiele

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