Delen via


foutklasse UNRESOLVED_ROUTINE

SQLSTATE: 42883

Kan de functie <routineName> niet oplossen op zoekpad <searchPath>.

Parameters

  • routineName: de naam van de functie die niet kan worden omgezet.
  • searchPath: de geordende lijst met schema's die zijn doorzocht als routineName niet volgens schema is gekwalificeerd.

Uitleg

Persistente functies bestaan uit drie naamonderdelen: <catalog>.<schema>.<relation>. Als u niet alle drie de onderdelen van de naam opgeeft, wordt deze impliciet voltooid met behulp van de huidige catalogus of het huidige schema. Dit is vergelijkbaar met de manier waarop de werkmap van uw bestandssysteem van invloed is op welke bestanden u kunt zien, tenzij u het pad volledig opgeeft.

Tijdelijke functies bestaan alleen binnen de sessie of query en mogen nooit worden gekwalificeerd.

De meest voorkomende reden voor het niet vinden van een functie zijn:

  • De functie bestaat niet.
  • De naam van de functie is onjuist gespeld.
  • De door de gebruiker gedefinieerde functie bevindt zich in een ander schema.
  • De door de gebruiker gedefinieerde functie bevindt zich niet in het huidige schema.
  • U kunt de door de gebruiker gedefinieerde functie niet weergeven omdat u geen toegang hebt.
  • De ingebouwde functie die u probeert aan te roepen, is niet beschikbaar in deze versie van Azure Databricks.

Oplossing

Los fouten op door het volgende te bekijken.

  • Hebt u de naam van de functie onjuist gespeld?

    Gebruik SHOW FUNCTIONS IN <schema> dit om de juiste functienaam te controleren.

  • Bevindt de functie zich in een ander schema?

    Als de functie zich in een catalogus in Unity Catalog bevindt, voert u de volgende query uit:

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

    Hiermee wordt het schema weergegeven in de huidige catalogus waarin de functie zich bevindt.

    Als de functie zich buiten Unity Catalog bevindt, gebruikt u SHOW SCHEMAS om kandidaatschema's te vinden. Gebruik SHOW FUNCTIONS IN <schema> dit om de functie te testen.

  • Hebt u de naam niet volledig gekwalificeerd, en komt het resultaat van VALUES current_schema() niet overeen met de volledige gekwalificeerde naam van de functie?

    Kwalificeren functionName met het schema en de bijbehorende catalogus of voer USE SCHEMA uit om het impliciete schema in te stellen.

  • Hebt u verwezen naar een tijdelijke functie, maar deze was in een vorige, verlopen of andere sessie?

    Maak de tijdelijke functie opnieuw met behulp van CREATE TEMPORARY FUNCTION <routineName> …of schakel over naar het gebruik van een persistente functie.

  • Wilt u een DDL-instructie uitgeven, bijvoorbeeld DROP FUNCTION voor het geval het object bestaat?

    Geef de instructie uit met behulp van de IF EXISTS component, zoals: DROP FUNCTION <routineName> IF EXISTS.

  • Weet u dat de functie bestaat, maar u kunt deze niet zien in SHOW FUNCTIONS?

    Neem contact op met de beheerder om toegang te krijgen tot de functie. Mogelijk hebt u ook toegang nodig tot het schema en de catalogus.

Zie Functieomzetting voor meer informatie over het oplossen van de fout.

Voorbeelden

> 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