Sdílet prostřednictvím


TABLE_OR_VIEW_NOT_FOUND třída chyb

SQLSTATE: 42P01

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

Pokud jste název neověřili schématem, ověřte výstup current_schema() nebo název opravte správným schématem a katalogem.

Pokud chcete tolerovat chybu při přetažení, použijte DROP VIEW IF EXISTS nebo DROP TABLE IF EXISTS.

Parametry

  • relationName: Název zadané relace (tabulky nebo zobrazení), který nebyl nalezen.

Vysvětlení

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

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

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

  • 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á přístup k objektu, 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, 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ě kvalifikujte relationName objekt pomocí jeho schématu a katalogu nebo spusťte USE SCHEMA příkaz pro nastavení požadovaného implicitního schématu.

  • Odkazovali jste na dočasné zobrazení, které se ale nacházelo v předchozí relaci, v jiné relaci nebo v 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, jen pro případ, že objekt existuje?

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

  • Víte, že objekt existuje, ale v SHOW TABLEněm ho nevidíte?

    Požádejte správce o udělení přístupu k tabulce. To může zahrnovat 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 tématu Řešení tabulek a zobrazení .

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;