Dela via


UNRESOLVED_ROUTINE felklass

SQLSTATE: 42883

Det går inte att lösa funktionen <routineName> på sökvägen <searchPath>.

Parametrar

  • routineName: Namnet på funktionen som inte kan matchas.
  • searchPath: Den ordnade listan över scheman som genomsöktes om routineName inte schemakvalificerades.

Förklaring

Beständiga funktioner består av tre namndelar: <catalog>.<schema>.<relation>. Om du inte anger alla tre delarna av namnet slutförs det implicit med den aktuella katalogen eller det aktuella schemat. Detta liknar hur arbetskatalogen i filsystemet påverkar vilka filer du kan se, såvida du inte helt anger sökvägen.

Tillfälliga funktioner finns bara i sessionen eller frågan och får aldrig kvalificeras.

Den vanligaste orsaken till att du inte hittar en funktion är:

  • Funktionen finns inte.
  • Funktionsnamnet är felstavat.
  • Den användardefinierade funktionen finns i ett annat schema.
  • Den användardefinierade funktionen finns inte i det aktuella schemat.
  • Du kan inte visa den användardefinierade funktionen eftersom du inte har åtkomst.
  • Den inbyggda funktion som du försöker anropa är inte tillgänglig i den här versionen av Azure Databricks.

Riskreducering

Åtgärda fel genom att granska följande.

  • Stavade du funktionsnamnet felaktigt?

    Använd SHOW FUNCTIONS IN <schema> för att verifiera rätt funktionsnamn.

  • Finns funktionen i ett annat schema?

    Om funktionen finns i en katalog i Unity Catalog kör du följande fråga:

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

    Då visas schemat i den aktuella katalogen där funktionen finns.

    Om funktionen finns utanför Unity Catalog använder du SHOW SCHEMAS för att hitta kandidatscheman. Använd SHOW FUNCTIONS IN <schema> för att avsöka för funktionen.

  • Har du inte kvalificerat namnet fullständigt och resultatet av VALUES current_schema() matchar inte funktionens kvalificerade namn?

    Kvalificera med functionName dess schema och katalog, eller kör USE SCHEMA för att ange det implicita schemat.

  • Refererade du till en tillfällig funktion, men den var i en tidigare, förfallen eller annan session?

    Återskapa den tillfälliga funktionen med hjälp av CREATE TEMPORARY FUNCTION <routineName> …eller växla till med hjälp av en bevarad funktion.

  • Vill du utfärda en DDL-instruktion, till exempel DROP FUNCTION om objektet finns?

    Utfärda -instruktionen med hjälp av IF EXISTS -satsen, till exempel: DROP FUNCTION <routineName> IF EXISTS.

  • Vet du att funktionen finns, men du kan inte se den i SHOW FUNCTIONS?

    Kontakta administratören för att få åtkomst till funktionen. Du kan också behöva åtkomst till schemat och katalogen.

Mer information om hur du löser felet finns i Funktionsmatchning.

Exempel

> 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