Compartilhar via


UNRESOLVED_ROUTINE classe de erro

SQLSTATE: 42883

Não é possível resolver a função <routineName> no caminho de pesquisa <searchPath>.

Parâmetros

  • routineName: O nome da função que não pode ser resolvida.
  • searchPath: a lista ordenada de esquemas que foi pesquisada se routineName não fosse qualificada para o esquema.

Explicação

As funções persistentes consistem em três partes de nome: <catalog>.<schema>.<relation>. Se você não especificar todas as três partes do nome, ele será completado implicitamente usando o catálogo atual ou o esquema atual. Isso é semelhante à maneira como o diretório de trabalho do sistema de arquivos influencia quais arquivos você pode ver, a menos que você especifique completamente o caminho.

As funções temporárias só existem na sessão ou consulta e nunca devem ser qualificadas.

Os motivos mais comuns para não encontrar uma função são:

  • A função não existe.
  • O nome da função está incorreto.
  • A função definida pelo usuário está localizada em um esquema diferente.
  • A função definida pelo usuário não está localizada no esquema atual.
  • Você não pode exibir a função definida pelo usuário porque não tem acesso.
  • A função interna que você está tentando invocar não está disponível nesta versão do Azure Databricks.

Mitigação

Reduza os erros revisando o seguinte.

  • Você digitou o nome da função incorretamente?

    Use SHOW FUNCTIONS IN <schema> para verificar o nome correto da função.

  • A função está em um esquema diferente?

    Se a função estiver localizada em um catálogo no Catálogo do Unity, execute a seguinte consulta:

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

    Isso lista o esquema dentro do catálogo atual em que a função está localizada.

    Se a função estiver localizada fora do Catálogo do Unity, use SHOW SCHEMAS para localizar esquemas candidatos. Use SHOW FUNCTIONS IN <schema> para sondar a função.

  • Você não qualificou totalmente o nome e o resultado de VALUES current_schema() não corresponde ao nome qualificado da função?

    Qualifique-se functionName com seu esquema e catálogo ou execute USE SCHEMA para definir o esquema implícito.

  • Você fez referência a uma função temporária, mas ela estava em uma sessão anterior, expirada ou diferente?

    Recrie a função temporária usando CREATE TEMPORARY FUNCTION <routineName> …ou alterne para o uso de uma função persistente.

  • Deseja emitir uma instrução DDL, como DROP FUNCTION apenas no caso de o objeto existir?

    Emita a instrução usando a cláusula IF EXISTS, como: DROP FUNCTION <routineName> IF EXISTS.

  • Você sabe que a função existe, mas não consegue vê-la em SHOW FUNCTIONS?

    Entre em contato com o administrador para obter acesso à função. Você também pode precisar de acesso ao esquema e ao catálogo.

Para obter mais informações sobre como resolver o erro, consulte Resolução de função.

Exemplos

> 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