Condition d’erreur UNRESOLVED_ROUTINE

SQLSTATE: 42883

Impossible de trouver la fonction <routineName> dans le chemin de recherche <searchPath>.

Paramètres

  • routineName : nom de la fonction qui ne peut pas être résolue.
  • searchPath : liste ordonnée de schémas qui a été recherchée si routineName n’était pas qualifié par un schéma.

Description

Les fonctions persistantes se composent de trois parties de nom : <catalog>.<schema>.<relation>. Si vous ne spécifiez pas toutes les trois parties du nom, celui-ci est implicitement complété à partir du catalogue actif ou du schéma actif. Cela est similaire à la façon dont le répertoire de travail de votre système de fichiers influence les fichiers que vous pouvez voir, sauf si vous spécifiez entièrement le chemin d’accès.

Les fonctions temporaires existent uniquement dans la session ou la requête et ne doivent jamais être qualifiées.

Les raisons les plus courantes de ne pas trouver une fonction sont les suivantes :

  • La fonction n’existe pas.
  • Le nom de la fonction est mal orthographié.
  • La fonction définie par l’utilisateur se trouve dans un autre schéma.
  • La fonction définie par l’utilisateur n’est pas située dans le schéma actuel.
  • Vous ne pouvez pas afficher la fonction définie par l’utilisateur, car vous n’avez pas accès.
  • La fonction intégrée que vous essayez d’appeler n’est pas disponible sur cette version d’Azure Databricks.

Atténuation

Réduisez les erreurs en examinant les éléments suivants.

  • Avez-vous orthographié le nom de la fonction de manière incorrecte ?

    Utilisez SHOW FUNCTIONS IN \<schema\> pour vérifier le nom correct de la fonction.

  • La fonction est-elle dans un schema différent ?

    Si la fonction se trouve dans un catalogue dans Unity Catalog, exécutez la requête suivante :

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

    Cela répertorie le schéma dans le catalogue actuel où se trouve la fonction.

    Si la fonction se trouve en dehors de Unity Catalog, utilisez SHOW SCHEMAS pour rechercher des schémas candidats. Utilisez SHOW FUNCTIONS IN \<schema\> pour détecter la présence de la fonction.

  • Vous n’avez pas entièrement qualifié le nom et le résultat de VALUES current_schema() ne correspond pas au nom qualifié de la fonction ?

    Qualifiez functionName avec son schéma et son catalogue, ou exécutez USE SCHEMA pour définir le schéma implicite.

  • Avez-vous fait référence à une fonction temporaire, mais elle était dans une session précédente, expirée ou différente ?

    Recréez la fonction temporaire à l’aide de CREATE TEMPORARY FUNCTION \<routineName\> …, ou basculez vers une fonction persistante.

  • Voulez-vous émettre une instruction DDL, telle que DROP FUNCTION au cas où l’objet existe ?

    Émettez l’énoncé à l’aide de la clause IF EXISTS, par exemple : DROP FUNCTION \<routineName\> IF EXISTS.

  • Vous savez que la fonction existe, mais vous ne pouvez pas la voir dans SHOW FUNCTIONS?

    Contactez votre administrateur pour accéder à la fonction. Vous devrez peut-être également accéder au schéma et au catalogue.

Pour plus d’informations sur la résolution de l’erreur, voir Résolution des fonctions et procédures.

Exemples

> 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