共用方式為


未解決的例行程序錯誤類別

SQLSTATE:42883

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

參數

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

說明

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

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

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

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

風險降低

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

  • 您拼錯了函式名稱嗎?

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

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

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

    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