TABLE_OR_VIEW_NOT_FOUND hibaosztály

SQLSTATE: 42P01

A tábla vagy nézet <relationName> nem található. Ellenőrizze a séma és a katalógus helyesírását és helyességét.

Ha nem minősítette a nevet sémával, ellenőrizze a current_schema() kimenetet, vagy minősítse a nevet a megfelelő sémával és katalógussal.

A hiba elviseléséhez használja a DROP VIEW IF EXISTS vagy a DROP TABLE IF EXISTS parancsot.

Paraméterek

  • relationName: A megadott kapcsolat (tábla vagy nézet) neve, amely nem található.

Magyarázat

A megőrzött táblák és nézetek három névrészből állnak: <catalog>.<schema>.<relation>. Ha nem adja meg a név mindhárom részét, az implicit módon befejeződik az aktuális katalógus vagy az aktuális séma használatával. Ez hasonló ahhoz, ahogyan a fájlrendszer munkakönyvtára befolyásolja, hogy mely fájlok láthatók, hacsak nem adja meg teljes mértékben az elérési utat.

Az ideiglenes nézetek vagy a közös táblakifejezések (CTE) csak a munkameneten vagy lekérdezésen belül léteznek, és soha nem minősíthetők.

A leggyakoribb ok, amiért nem talál táblát vagy nézetet, a következők:

  • Az objektum egyszerűen nem létezik.
  • Az objektum nevét, sémáját vagy katalógusát helytelenül írtuk.
  • Az objektum nem az aktuális sémában található.
  • A felhasználónak nincs hozzáférése az objektumhoz, ezért nem látja.

Kezelés

A hiba elhárítása az októl függ:

  • Helytelenül írta be a táblázat vagy a nézet, a séma vagy a katalógus nevét?

    Javítsa ki a helyesírást.

  • Nem felelt meg teljes mértékben a névnek, és az eredmény VALUES current_schema() nem egyezik meg a tábla vagy nézet minősített nevével?

    Explicit módon minősítse a sémát és a relationName katalógust, vagy adjon ki egy USE SCHEMA parancsot a kívánt implicit séma beállításához.

  • Hivatkozott ideiglenes nézetre, de egy korábbi, lejárt vagy más munkamenetben volt?

    Hozza létre újra az ideiglenes nézetet a használatával CREATE TEMPORARY VIEW <relationName> …, vagy váltson állandó nézetre.

  • Hivatkozott egy közös táblakifejezésre (CTE), de nincs hatóköre?

    Helyezze át a CTE definícióját a legkülső lekérdezésbe. Ez az utasítás kezdete, így mindenhol látható az utasításban.

  • Ki szeretne adni egy DDL-utasítást, például "DROP TABLE" utasítást arra az esetre, ha az objektum létezik?

    Adja ki az utasítást a IF EXISTS záradék használatával, például: DROP TABLE <relationName> IF EXISTS.

  • Tudja, hogy az objektum létezik, de nem látja a következőben SHOW TABLE: ?

    A megadott táblához való hozzáférésért forduljon a rendszergazdához. Ehhez szükség lehet a sémához és a katalógushoz való hozzáférésre is.

  • Nem egyértelmű, hogy miért nem tudja feloldani a táblázatot vagy a nézetet?

    A névfeloldás részletes leírását a Táblázat és a nézetfeloldás című témakörben találja .

Példák

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