Compartir a través de


UNRESOLVED_ROUTINE clase de error

SQLSTATE: 42883

No se puede resolver la función <routineName> en la ruta de acceso de búsqueda <searchPath>.

Parámetros

  • routineName: el nombre de la función que no se puede resolver.
  • searchPath: lista ordenada de esquemas en los que se ha buscado si routineName no se ha calificado el esquema.

Explicación

Las funciones persistentes constan de tres partes de nombre: <catalog>.<schema>.<relation>. Si no especifica las tres partes del nombre, se completa implícitamente mediante el catálogo actual o el esquema actual. Esto es similar a la forma en que el directorio de trabajo del sistema de archivos influye en qué archivos puede ver, a menos que especifique completamente la ruta de acceso.

Las funciones temporales solo existen dentro de la sesión o consulta y nunca se deben calificar.

La razón más común para no encontrar una función es:

  • La función no existe.
  • El nombre de la función está mal escrito.
  • La función definida por el usuario se encuentra en un esquema diferente.
  • La función definida por el usuario no se encuentra en el esquema actual.
  • No puede ver la función definida por el usuario porque no tiene acceso.
  • La función integrada que intenta invocar no está disponible en esta versión de Azure Databricks.

Mitigación

Para mitigar los errores, revise lo siguiente.

  • ¿Ha escrito el nombre de la función incorrectamente?

    Use SHOW FUNCTIONS IN <schema> para comprobar el nombre de función correcto.

  • ¿La función está en un esquema diferente?

    Si la función se encuentra en un catálogo de Unity Catalog, ejecute la consulta siguiente:

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

    Esto enumera el esquema dentro del catálogo actual donde se encuentra la función.

    Si la función se encuentra fuera del catálogo de Unity, use SHOW SCHEMAS para buscar esquemas candidatos. Use SHOW FUNCTIONS IN <schema> para sondear la función.

  • ¿No ha calificado completamente el nombre y el resultado de VALUES current_schema() no coincide con el nombre completo de la función?

    Califica functionName con su esquema y catálogo, o ejecute USE SCHEMA para establecer el esquema implícito.

  • ¿Ha hecho referencia a una función temporal, pero estaba en una sesión anterior, expirada o diferente?

    Vuelva a crear la función temporal mediante CREATE TEMPORARY FUNCTION <routineName> …o cambie a mediante una función persistente.

  • ¿Desea emitir una instrucción DDL, como DROP FUNCTION en caso de que exista el objeto?

    Emita la instrucción mediante la cláusula IF EXISTS, como: DROP FUNCTION <routineName> IF EXISTS.

  • ¿Sabe que la función existe, pero no puede verla en SHOW FUNCTIONS?

    Póngase en contacto con el administrador para obtener acceso a la función. Es posible que también necesite acceso al esquema y al catálogo.

Para obtener más información sobre cómo resolver el error, consulte Resolución de funciones.

Ejemplos

> 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