Sdílet prostřednictvím


UNRESOLVED_ROUTINE třída chyb

SQLSTATE: 42883

Nelze přeložit funkci <routineName> v cestě <searchPath>hledání .

Parametry

  • routineName: Název funkce, kterou nelze přeložit.
  • searchPath: Seřazený seznam schémat, která byla prohledána, pokud routineName nebyla kvalifikovaná.

Vysvětlení

Trvalé funkce se skládají ze tří částí názvů: <catalog>.<schema>.<relation>. Pokud nezadáte všechny tři části názvu, implicitně se dokončí pomocí aktuálního katalogu nebo aktuálního schématu. To se podobá způsobu, jakým pracovní adresář systému souborů ovlivňuje, které soubory můžete vidět, pokud cestu plně nezadáte.

Dočasné funkce existují pouze v rámci relace nebo dotazu a nesmí být nikdy kvalifikované.

Nejběžnějším důvodem, proč funkci nenajdete, jsou:

  • Funkce neexistuje.
  • Název funkce je chybně napsaný.
  • Uživatelem definovaná funkce se nachází v jiném schématu.
  • Uživatelem definovaná funkce není umístěna v aktuálním schématu.
  • Uživatelem definovanou funkci nemůžete zobrazit, protože nemáte přístup.
  • Integrovaná funkce, kterou se pokoušíte vyvolat, není v této verzi Azure Databricks dostupná.

Zmírnění

Pokud chcete zmírnit chyby, projděte si následující informace.

  • Napsali jste nesprávně název funkce?

    Slouží SHOW FUNCTIONS IN <schema> k ověření správného názvu funkce.

  • Je funkce v jiném schématu?

    Pokud je funkce umístěna v katalogu v Katalogu Unity, spusťte následující dotaz:

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

    Zobrazí se seznam schématu v aktuálním katalogu, kde je funkce umístěna.

    Pokud je funkce umístěna mimo Katalog Unity, použijte SHOW SCHEMAS k vyhledání kandidátských schémat. Slouží SHOW FUNCTIONS IN <schema> k sondování funkce.

  • Nepovedlo se vám plně kvalifikovat název a výsledek VALUES current_schema() neodpovídá kvalifikovanému názvu funkce?

    Kvalifikujte functionName se s jeho schématem a katalogem nebo spusťte USE SCHEMA nastavení implicitního schématu.

  • Odkazovali jste na dočasnou funkci, ale byla v předchozí, prošlé nebo jiné relaci?

    Znovu vytvořte dočasnou funkci pomocí CREATE TEMPORARY FUNCTION <routineName> …funkce nebo přepněte na trvalé funkce.

  • Chcete vydat příkaz DDL, například DROP FUNCTION v případě, že objekt existuje?

    Vyřešte příkaz pomocí IF EXISTS klauzule, například: DROP FUNCTION <routineName> IF EXISTS.

  • Víte, že funkce existuje, ale nevidíte ji v SHOW FUNCTIONS?

    Obraťte se na správce a získejte přístup k funkci. Možná budete potřebovat také přístup ke schématu a katalogu.

Další informace o řešení chyby najdete v tématu Řešení funkce.

Příklady

> 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