TABLE_OR_VIEW_NOT_FOUND klasa błędów

SQLSTATE: 42P01

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