TABLE_OR_VIEW_NOT_FOUND 錯誤類別
找不到資料表或檢視 <relationName>
。 確認架構和目錄的拼字和正確性。
如果您未使用架構限定名稱,請確認current_schema() 輸出,或使用正確的架構和目錄來限定名稱。
若要在卸除時容忍錯誤,請使用 DROP VIEW IF EXISTS 或 DROP TABLE IF EXISTS。
參數
- relationName:找不到指定關聯性的名稱(數據表或檢視表)。
解釋
持久化的資料表和視圖由三個名稱部分組成:<catalog>.<schema>.<relation>
。
如果您未指定名稱的所有三個部分,則會使用目前的目錄或目前的架構隱含完成。
這與文件系統的工作目錄如何影響您可以看到哪些檔案的方式類似,除非您完全指定路徑。
暫存檢視或通用數據表表達式 (CTE) 只存在於會話或查詢內,且絕對不能限定。
找不到資料表或檢視的最常見原因是:
- 物件根本不存在。
- 物件名稱、架構或目錄拼錯。
- 物件不在目前的架構中。
- 使用者無法存取物件,因此看不到它。
減緩
錯誤的緩解取決於錯誤的原因:
拼錯數據表或檢視表、架構或目錄名稱嗎?
更正拼字。
您是否未完整限定名稱,且
VALUES current_schema()
的結果不符合數據表或檢視的限定名稱?使用架構和目錄來明確定義
relationName
,或發出USE SCHEMA
命令以設定所需的隱含架構。您是否使用了一個暫時的檢視,但該檢視是在先前、已過期或不同的會話中?
使用
CREATE TEMPORARY VIEW <relationName> …
重建暫時檢視,或切換至使用永久檢視。您是否參考了通用數據表表達式 (CTE),但範圍不足?
將 CTE 的定義移至最外層的查詢。 這是語句的開頭,因此在語句中隨處可見。
您要發出 DDL 語句,例如『DROP TABLE』,以防萬一物件已經存在嗎?
使用
IF EXISTS
子句發出聲明,例如:DROP TABLE <relationName> IF EXISTS
。您知道物件存在,但
SHOW TABLE
中看不到它嗎?請聯絡系統管理員以取得表格的存取權。 這可能需要同時包含對資料庫結構和目錄的訪問權限。
目前還不清楚為何無法解析數據表或檢視表?
如需名稱解析的詳細描述,請參閱 數據表和檢視解析。
例子
-- 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;