Condividi tramite


classe di errore UNRESOLVED_ROUTINE

SQLSTATE: 42883

Impossibile risolvere la funzione <routineName> nel percorso <searchPath>di ricerca .

Parametri

  • routineName: nome della funzione che non può essere risolta.
  • searchPath: elenco ordinato di schemi cercati se routineName non era qualificato dallo schema.

Spiegazione

Le funzioni persistenti sono costituite da tre parti del nome: <catalog>.<schema>.<relation>. Se non si specificano tutte e tre le parti del nome, vengono completate in modo implicito usando il catalogo corrente o lo schema corrente. Questo è simile al modo in cui la directory di lavoro del file system influisce sui file visualizzati, a meno che non si specifichi completamente il percorso.

Le funzioni temporanee esistono solo all'interno della sessione o della query e non devono mai essere qualificate.

Il motivo più comune per cui non si trova una funzione sono:

  • La funzione non esiste.
  • Il nome della funzione è stato digitato in modo non digitato correttamente.
  • La funzione definita dall'utente si trova in uno schema diverso.
  • La funzione definita dall'utente non si trova nello schema corrente.
  • Non è possibile visualizzare la funzione definita dall'utente perché non si ha accesso.
  • La funzione predefinita che si sta tentando di richiamare non è disponibile in questa versione di Azure Databricks.

Strategia di riduzione del rischio

Attenuare gli errori esaminando quanto segue.

  • Il nome della funzione è stato digitato in modo errato?

    Usare SHOW FUNCTIONS IN <schema> per verificare il nome corretto della funzione.

  • La funzione è in uno schema diverso?

    Se la funzione si trova in un catalogo in Unity Catalog, eseguire la query seguente:

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

    In questo modo viene elencato lo schema all'interno del catalogo corrente in cui si trova la funzione.

    Se la funzione si trova all'esterno di Unity Catalog, usare SHOW SCHEMAS per trovare gli schemi candidati. Usare SHOW FUNCTIONS IN <schema> per eseguire il probe per la funzione.

  • Non hai qualificato completamente il nome, e il risultato di VALUES current_schema() non corrisponde al nome qualificato della funzione?

    Qualificare functionName con lo schema e il catalogo oppure eseguire USE SCHEMA per impostare lo schema implicito.

  • Si è fatto riferimento a una funzione temporanea, ma si trovava in una sessione precedente, scaduta o diversa?

    Ricreare la funzione temporanea usando CREATE TEMPORARY FUNCTION <routineName> …o passare all'uso di una funzione persistente.

  • Eseguire un'istruzione DDL, ad esempio DROP FUNCTION nel caso in cui l'oggetto esista?

    Eseguire l'istruzione usando la IF EXISTS clausola , ad esempio : DROP FUNCTION <routineName> IF EXISTS.

  • Si sa che la funzione esiste, ma non è possibile vederla in SHOW FUNCTIONS?

    Contattare l'amministratore per ottenere l'accesso alla funzione. Potrebbe anche essere necessario accedere allo schema e al catalogo.

Per altre informazioni su come risolvere l'errore, vedere Risoluzione delle funzioni.

Esempi

> 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