TABLE_OR_VIEW_NOT_FOUND hibaosztály
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 egyUSE 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;