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;