共用方式為


UNRESOLVED_ROUTINE錯誤類別

SQLSTATE:42883

無法解析搜尋路徑 <searchPath>上的函式<routineName>

參數

  • routineName:無法解析之函式的名稱。
  • searchPath:如果 routineName 不是架構限定,則搜尋的已排序架構清單。

說明

保存的函式包含三個名稱部分: <catalog>.<schema>.<relation>。 如果您未指定名稱的所有三個部分,則會使用目前的目錄或目前的架構隱含完成。 這與文件系統的工作目錄如何影響您可以看到哪些檔案的方式類似,除非您完全指定路徑。

暫存函式只存在於會話或查詢內,且絕對不能限定。

找不到函式最常見的原因是:

  • 函式不存在。
  • 函式名稱拼錯。
  • 用戶定義函數位於不同的架構中。
  • 用戶定義函數不在目前的架構中。
  • 您無法檢視使用者定義函式,因為您沒有存取權。
  • 您嘗試叫用的內建函式在此版本的 Azure Databricks 上無法使用。

風險降低

檢閱下列內容來減輕錯誤。

  • 您拼錯了函式名稱嗎?

    使用 SHOW FUNCTIONS IN <schema> 來驗證正確的函式名稱。

  • 函式是否位於不同的架構中?

    如果函式位於 Unity 目錄中的目錄,請執行下列查詢:

    SELECT routine_schema FROM information_schema.routines WHERE routine_name = '<routinename>'

    這會列出函式所在目前目錄中的架構。

    如果函式位於 Unity 目錄外部,請使用 SHOW SCHEMAS 來尋找候選架構。 使用 SHOW FUNCTIONS IN <schema> 來探查函式。

  • 您是否未完整限定名稱,且 的結果 VALUES current_schema() 不符合函式的限定名稱?

    符合其架構和目錄的資格 functionName ,或執行 USE SCHEMA 以設定隱含架構。

  • 您是否參考暫存函式,但先前、已過期或不同的會話中?

    使用 CREATE TEMPORARY FUNCTION <routineName> …重新建立暫存函式,或使用儲存的函式切換至 。

  • 您是否要發出 DDL 語句,例如 DROP FUNCTION ,如果物件存在,則為嗎?

    使用 IF EXISTS 子句發出 語句,例如: DROP FUNCTION <routineName> IF EXISTS

  • 您知道函式存在,但無法在 中看到 SHOW FUNCTIONS它嗎?

    請連絡您的系統管理員以取得函式的存取權。 您可能也需要存取架構和目錄。

如需如何解決錯誤的詳細資訊,請參閱 函式解析

範例

> CREATE SCHEMA IF NOT EXISTS myschema;
> CREATE OR REPLACE FUNCTION myschema.myfunc() RETURNS INT RETURN 5;

--
-- The function name has been misspelled
--
> SELECT myschema.myfun();
  [UNRESOLVED_ROUTINE] Cannot resolve function `myschema`.`myfun` on search path [`system`.`builtin`, `system`.`session`, `spark_catalog`.`default`].; line 1 pos 7

-- Use SHOW FUNCTIONS to find the correct nme
> SHOW USER FUNCTIONS IN myschema;
  spark_catalog.myschema.myfunc

-- Correct the spelling
> SELECT myschema.myfunc();
 5

--
-- The qualifier has been misspelled
--
> CREATE SCHEMA IF NOT EXISTS wrongschema;
> SELECT wrongschema.myfunc;
 [UNRESOLVED_ROUTINE] Cannot resolve function `wrongschema`.`myfunc` on search path [`system`.`builtin`, `system`.`session`, `spark_catalog`.`default`].; line 1 pos 7

-- Find candidate schemas
> SHOW SCHEMAS;
  myschema
  wrongschema

-- Verify the function exists in the candidate schema
> SHOW USER FUNCTIONS IN myschema;
  spark_catalog.myschema.myfunc

> SELECT myschema.myfunc();
 5

--
-- Change current schema to find an unqualified function
--
> SELECT myfunc();
  [UNRESOLVED_ROUTINE] Cannot resolve function `myfunc` on search path [`system`.`builtin`, `system`.`session`, `spark_catalog`.`default`].; line 1 pos 7

> USE SCHEMA myschema;

SELECT myfunc();
5