klasa błędu TABLE_OR_VIEW_NOT_FOUND
Nie można odnaleźć tabeli lub widoku <relationName>
. Sprawdź pisownię i poprawność schematu i wykazu.
Jeśli nazwa nie została zakwalifikowana za pomocą schematu, sprawdź wynik current_schema(), lub zakwalifikuj nazwę z poprawnym schematem i katalogiem.
Żeby zignorować błąd podczas operacji usuwania, należy użyć DROP VIEW IF EXISTS lub DROP TABLE IF EXISTS.
Parametry
- relationName: nie można odnaleźć nazwy określonej relacji (tabeli lub widoku).
Wyjaśnienie
Trwałe tabele i widoki składają się z trzech części nazwy: <catalog>.<schema>.<relation>
.
Jeśli nie określisz wszystkich trzech części nazwy, zostanie ona niejawnie ukończona przy użyciu bieżącego wykazu lub bieżącego schematu.
Jest to podobne do sposobu, w jaki katalog roboczy systemu plików wpływa na widoczne pliki, chyba że w pełni określisz ścieżkę.
Widoki tymczasowe lub wspólne wyrażenia tabelowe (CTE) istnieją tylko w ramach sesji lub zapytania i nigdy nie mogą być kwalifikowane.
Najczęstszą przyczyną braku znalezienia tabeli lub widoku jest:
- Obiekt po prostu nie istnieje.
- Nazwa obiektu, schemat lub wykaz został błędnie napisany.
- Obiekt nie znajduje się w bieżącym schemacie.
- Użytkownik nie ma dostępu do obiektu i dlatego nie może go zobaczyć.
Łagodzenia
Ograniczenie ryzyka błędu zależy od przyczyny:
Czy błędnie zapisałeś/zapisałaś nazwę tabeli, widoku, schematu lub wykazu?
Popraw pisownię.
Czy nie w pełni kwalifikowano nazwy i wynik
VALUES current_schema()
nie jest zgodny z kwalifikowaną nazwą tabeli lub widoku?Wyraźne kwalifikowanie
relationName
ze schematem i katalogiem lub wydaj polecenieUSE SCHEMA
, aby ustawić żądany niejawny schemat.Czy odwołujesz się do widoku tymczasowego, ale był w poprzedniej, wygasłej lub innej sesji?
Utwórz ponownie widok tymczasowy przy użyciu
CREATE TEMPORARY VIEW <relationName> …
lub przełącz się do korzystania z widoku trwałego.Czy odwołujesz się do wspólnego wyrażenia tabeli (CTE), ale jest ono poza zakresem?
Przenieś definicję CTE do zewnętrznego zapytania. To jest początek oświadczenia, więc jest widoczny wszędzie w oświadczeniu.
Czy chcesz wydać instrukcję DDL, taką jak "DROP TABLE" na wypadek, gdy obiekt istnieje?
Wydaj oświadczenie przy użyciu klauzuli
IF EXISTS
, takiej jak:DROP TABLE <relationName> IF EXISTS
.Czy wiesz, że obiekt istnieje, ale nie widzisz go w
SHOW TABLE
?Skontaktuj się z administratorem, aby uzyskać dostęp do przyznanej tabeli. Może to również wymagać uwzględnienia dostępu do schematu i katalogu.
Nie jest jasne, dlaczego nie można rozpoznać tabeli ani widoku?
Aby uzyskać szczegółowy opis rozpoznawania nazw, zapoznaj się z Tabelą i zobacz resolution.
Przykłady
-- 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;
Powiązane
- funkcja current_schema
- USE SCHEMA
- CREATE VIEW
- DROP TABLE
- SHOW TABLE EXTENDED