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;