classe di errore TABLE_OR_VIEW_NOT_FOUND
Impossibile trovare la tabella o la vista <relationName>
. Verificare l'ortografia e la correttezza dello schema e del catalogo.
Se non hai qualificato il nome con uno schema, verifica l'output di current_schema() o qualifica il nome utilizzando lo schema e il catalogo corretti.
Per tollerare l'errore durante l'eliminazione, utilizzare il comando DROP VIEW IF EXISTS o DROP TABLE IF EXISTS.
Parametri
- relationName: nome della relazione specificata (tabella o vista) che non è possibile trovare.
Spiegazione
Le tabelle e le viste persistenti si compongono di tre parti del nome ciascuna: <catalog>.<schema>.<relation>
.
Se non si specificano tutte e tre le parti del nome, queste vengono completate implicitamente usando il catalogo corrente o lo schema corrente.
Questo è simile al modo in cui la directory di lavoro del file system influisce sui file visualizzati, a meno che non si specifichi completamente il percorso.
Le viste temporanee o le espressioni di tabella comuni (CTE) esistono solo all'interno della sessione o della query e non devono mai essere qualificate.
Il motivo più comune per cui non è possibile trovare una tabella o una vista sono:
- L'oggetto semplicemente non esiste.
- Il nome dell'oggetto, lo schema o il catalogo è stato scritto in modo errato.
- L'oggetto non si trova nello schema corrente.
- L'utente non ha accesso all'oggetto e pertanto non può vederlo.
Mitigazione
La mitigazione dell'errore dipende dalla causa:
Hai scritto in modo errato il nome della tabella o della vista, dello schema o del catalogo?
Correggere l'ortografia.
Non hai qualificato completamente il nome e il risultato di
VALUES current_schema()
non corrisponde al nome qualificato della tabella o della vista?Qualificare in modo esplicito il
relationName
con lo schema e il catalogo oppure eseguire un comandoUSE SCHEMA
per impostare lo schema implicito desiderato.Hai fatto riferimento a una visualizzazione temporanea, ma era in una sessione precedente, scaduta o diversa?
Ricreare la visualizzazione temporanea usando
CREATE TEMPORARY VIEW <relationName> …
o passare all'uso di una visualizzazione permanente.È stato fatto riferimento a un'espressione di tabella comune (CTE), ma non rientra nell'ambito?
Spostare la definizione del CTE nella query più esterna. Questo è l'inizio dell'istruzione, quindi è visibile ovunque all'interno dell'istruzione .
Eseguire un'istruzione DDL, ad esempio 'DROP TABLE' nel caso in cui l'oggetto esista?
Emettere l'istruzione usando la clausola
IF EXISTS
, per esempio:DROP TABLE <relationName> IF EXISTS
.Si sa che l'oggetto esiste, ma non è possibile vederlo in
SHOW TABLE
?Contattare l'amministratore per ottenere l'accesso alla tabella concessa. Potrebbe essere necessario includere anche l'accesso allo schema e al catalogo.
Non è chiaro perché non è possibile risolvere la tabella o la vista?
Fai riferimento alla tabella e alla risoluzione per una descrizione dettagliata della risoluzione dei nomi.
Esempi
-- 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;