共用方式為


TABLE_OR_VIEW_NOT_FOUND 錯誤類別

SQLSTATE:42P01

找不到資料表或檢視 <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;