Pular para o conteúdo principal

Classe de erro UNRESOLVED_ROUTINE

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 qualificado 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á preenchido implicitamente usando o catálogo atual ou o esquema atual. Isso é semelhante à forma como o diretório de trabalho do seu sistema de arquivos influencia quais arquivos você pode ver, a menos que você especifique totalmente 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á escrito incorretamente.
  • 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.
  • Não é possível acessar view a função definida pelo usuário porque o senhor não tem acesso.
  • A função integrada que o senhor está tentando invocar não está disponível nesta versão do Databricks.

Mitigação

Reduza os erros analisando 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 em Unity Catalog, execute a seguinte consulta:

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

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

    Se a função estiver localizada fora do Unity Catalog, use SHOW SCHEMAS para encontrar esquemas candidatos. Use SHOW FUNCTIONS IN \<schema\> para investigar 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 o site 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 mude para uma função persistente.

  • Você quer emitir uma instrução DDL, como DROP FUNCTION, caso o objeto exista?

    Emita a declaraçã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 seu administrador para ter acesso à função. Você também pode precisar acessar o esquema e o catálogo.

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

Exemplos

SQL
> 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

Relacionado