TABLE_OR_VIEW_NOT_FOUND klasa błędów
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ź dane wyjściowe current_schema() lub zakwalifikuj nazwę przy użyciu poprawnego schematu i katalogu.
Aby tolerować błąd podczas upuszczania, użyj WIDOKU DROP, JEŚLI ISTNIEJE lub UPUŚĆ TABELĘ, JEŚLI ISTNIEJE.
Parametry
- relationName: nazwa określonej relacji (tabeli lub widoku), której nie można odnaleźć.
Wyjaśnienie
Utrwalone tabele i widoki składają się z trzech części nazw: <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 pliki, które można zobaczyć, chyba że w pełni określisz ścieżkę.
Widoki tymczasowe lub typowe wyrażenia tabeli (CTE) istnieją tylko w ramach sesji lub zapytania i nigdy nie muszą 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 tabela lub widok, schemat lub nazwa wykazu została niepoprawnie wpisana?
Popraw pisownię.
Czy nazwa nie została w pełni kwalifikowana i wynik
VALUES current_schema()
nie jest zgodny z kwalifikowaną nazwą tabeli lub widoku?Jawnie kwalifikują element
relationName
za pomocą schematu i katalogu lub wydajUSE SCHEMA
polecenie, aby ustawić żądany niejawny schemat.Czy odwołujesz się do widoku tymczasowego, ale był on w poprzedniej, wygasłej lub innej sesji?
Utwórz ponownie widok tymczasowy przy użyciu polecenia
CREATE TEMPORARY VIEW <relationName> …
lub przełącz się do korzystania z widoku stałego.Czy odwołujesz się do wspólnego wyrażenia tabeli (CTE), ale jest poza zakresem?
Przenieś definicję języka CTE do najbardziej zewnętrznego zapytania. Jest to początek instrukcji, więc jest ona widoczna wszędzie w instrukcji .
Czy chcesz wydać instrukcję DDL, taką jak "DROP TABLE", na wypadek, gdy obiekt istnieje?
Wydaj instrukcję przy użyciu klauzuli
IF EXISTS
, na przykład: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ć włączenia dostępu do schematu i katalogu.
Nie jest jasne, dlaczego nie można rozpoznać tabeli ani widoku?
Zapoznaj się z tematem Tabela i wyświetl rozdzielczość , aby uzyskać szczegółowy opis rozpoznawania nazw.
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;