Udostępnij za pośrednictwem


klasa błędu TABLE_OR_VIEW_NOT_FOUND

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ź 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 polecenie USE 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;