Sdílet prostřednictvím


Chybová podmínka TABLE_OR_VIEW_NOT_FOUND

SQLSTATE: 42P01

Tabulku nebo zobrazení <relationName> nelze najít. Ověřte pravopis a správnost schématu a katalogu.

Pokud název není již uveden ve spojení se schématem, ověřte výstup aktuálního schématu pomocí current_schema(), nebo název doplňte správným schématem a katalogem.

Chcete-li tolerovat chybu při vyřazení, použijte DROP VIEW POKUD EXISTUJE nebo DROP TABLE POKUD EXISTUJE.

Parametry

  • relationName: Název zadané relace (tabulky nebo zobrazení), která nebyla nalezena.

Vysvětlení

Trvalé tabulky a zobrazení se skládají ze tří částí názvu: <catalog>.<schema>.<relation>. Pokud nezadáte všechny tři části názvu, implicitně se dokončí pomocí aktuálního katalogu nebo aktuálního schématu. To se podobá způsobu, jakým pracovní adresář systému souborů ovlivňuje, které soubory můžete vidět, pokud cestu plně nezadáte.

Dočasná zobrazení nebo běžné výrazy tabulek (CTE) existují pouze v rámci relace nebo dotazu a nesmí být nikdy kvalifikované.

Nejběžnějším důvodem, proč nenajdete tabulku nebo zobrazení, jsou:

  • Objekt prostě neexistuje.
  • Název objektu, schéma nebo katalog byly chybně napsané.
  • Objekt není umístěn v aktuálním schématu.
  • Uživatel nemá k objektu přístup, a proto ho nemůže zobrazit.

Zmírnění

Zmírnění chyby závisí na příčině:

  • Napsali jste nesprávně název tabulky nebo zobrazení, schématu nebo katalogu?

    Opravte pravopis.

  • Nepovedlo se vám plně kvalifikovat název a výsledek VALUES current_schema() neodpovídá kvalifikovanému názvu tabulky nebo zobrazení?

    Explicitně kvalifikovat relationName s jeho schématem a katalogem nebo vydat příkaz USE SCHEMA pro nastavení požadovaného implicitního schématu.

  • Odkazovali jste na dočasné zobrazení, ale bylo v předchozí, prošlé nebo jiné relaci?

    Znovu vytvořte dočasné zobrazení pomocí CREATE TEMPORARY VIEW \<relationName\> …nebo přepněte na trvalé zobrazení.

  • Odkazovali jste na společný výraz tabulky (CTE), ale je mimo rozsah?

    Přesuňte definici CTE do vnějšího dotazu. To je začátek příkazu, takže je viditelný všude v příkazu.

  • Chcete vydat příkaz DDL, například "DROP TABLE" pouze v případě, že objekt existuje?

    Zadejte příkaz pomocí klauzule IF EXISTS, například: DROP TABLE \<relationName\> IF EXISTS.

  • Víte, že objekt existuje, ale v SHOW TABLEho nevidíte?

    Pokud chcete získat přístup k tabulce udělené, obraťte se na správce. To může vyžadovat také přístup ke schématu a katalogu.

  • Není jasné, proč nemůžete tabulku nebo zobrazení vyřešit?

    Podrobný popis překladu názvů najdete v tabulce a v rozlišení.

Příklady

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