Delen via


TABLE_OR_VIEW_NOT_FOUND foutklasse

SQLSTATE: 42P01

Kan de tabel of weergave <relationName> niet vinden. Controleer de spelling en juistheid van het schema en de catalogus.

Als u de naam niet hebt gekwalificeerd met een schema, controleert u de uitvoer current_schema() of kwalificeert u de naam met het juiste schema en de juiste catalogus.

Als u de fout bij neerzetten wilt tolereren, gebruikt u DROP VIEW IF EXISTS of DROP TABLE IF EXISTS.

Parameters

  • relationName: de naam van de opgegeven relatie (tabel of weergave) die niet kan worden gevonden.

Uitleg

Permanente tabellen en weergaven bestaan uit drie naamonderdelen: <catalog>.<schema>.<relation>. Als u niet alle drie de onderdelen van de naam opgeeft, wordt deze impliciet voltooid met behulp van de huidige catalogus of het huidige schema. Dit is vergelijkbaar met de manier waarop de werkmap van uw bestandssysteem invloed heeft op de bestanden die u kunt zien, tenzij u het pad volledig opgeeft.

Tijdelijke weergaven of algemene tabelexpressies (CTE) bestaan alleen binnen de sessie of query en mogen nooit worden gekwalificeerd.

De meest voorkomende redenen voor het niet vinden van een tabel of weergave zijn:

  • Het object bestaat gewoon niet.
  • De objectnaam, het schema of de catalogus is verkeerd gespeld.
  • Het object bevindt zich niet in het huidige schema.
  • De gebruiker heeft geen toegang tot het object en kan het daarom niet zien.

Mitigatie

De beperking van de fout is afhankelijk van de oorzaak:

  • Hebt u de naam van de tabel of weergave, het schema of de catalogus onjuist gespeld?

    Corrigeer de spelling.

  • Hebt u de naam niet volledig gekwalificeerd en komt het resultaat van VALUES current_schema() niet overeen met de gekwalificeerde naam van de tabel of weergave?

    Kwalificeer de expliciet met het relationName bijbehorende schema en de bijbehorende catalogus, of geef een USE SCHEMA opdracht om het gewenste impliciete schema in te stellen.

  • Hebt u verwezen naar een tijdelijke weergave, maar deze was in een eerdere, verlopen of andere sessie?

    Maak de tijdelijke weergave opnieuw met behulp van CREATE TEMPORARY VIEW <relationName> …, of schakel over naar een permanente weergave.

  • Hebt u verwezen naar een Common Table Expression (CTE), maar deze valt buiten het bereik?

    Verplaats de definitie van de CTE naar de buitenste query. Dat is het begin van de instructie, dus deze is overal in de -instructie zichtbaar.

  • Wilt u een DDL-instructie, zoals DROP TABLE, uitgeven voor het geval het object bestaat?

    Geef de -instructie uit met behulp van de IF EXISTS -component, zoals: DROP TABLE <relationName> IF EXISTS.

  • Weet u dat het object bestaat, maar kunt u het niet zien in SHOW TABLE?

    Neem contact op met de beheerder om toegang te krijgen tot de tabel die is verleend. Dit moet mogelijk ook toegang tot het schema en de catalogus omvatten.

  • Is het onduidelijk waarom u de tabel of weergave niet kunt oplossen?

    Raadpleeg Tabel- en weergaveresolutie voor een gedetailleerde beschrijving van naamomzetting.

Voorbeelden

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