Поделиться через


класс ошибок UNRESOLVED_ROUTINE

SQLSTATE: 42883

Не удается разрешить функцию <routineName> в пути <searchPath>поиска.

Parameters

  • routineName: имя функции, которая не может быть разрешена.
  • searchPath: упорядоченный list схем, которые были искомы, если routineName не schema квалифицированы.

Описание

Сохраненные функции состоят из трех частей имен: <catalog>.<schema>.<relation> Если не указать все три части имени, оно неявно завершено с помощью текущей catalog или текущей schema. Это похоже на то, как рабочий каталог файловой системы влияет на файлы, которые вы видите, если вы не полностью укажете путь.

Временные функции существуют только в сеансе или запросе и никогда не должны быть квалифицированы.

Наиболее распространенными причинами, по которой не найти функцию, являются:

  • Функция не существует.
  • Имя функции заблуждается.
  • Определяемая пользователем функция находится в другой schema.
  • Определяемая пользователем функция не находится в текущей schema.
  • Вы не можете просмотреть определяемую пользователем функцию, так как у вас нет доступа.
  • Встроенная функция, которую вы пытаетесь вызвать, недоступна в этом выпуске Azure Databricks.

Исправление

Чтобы устранить ошибки, просмотрите следующее.

  • Неправильно ли вы заклинили имя функции?

    Используется SHOW FUNCTIONS IN <schema> для проверки правильного имени функции.

  • Функция находится в другом schema?

    Если функция находится на catalog в Unity Catalog, выполните следующий запрос:

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

    В списке представлено schema в текущем catalogwhere, где расположена функция.

    Если функция находится вне CatalogUnity, используйте SHOW SCHEMAS для поиска схем кандидатов. Используется SHOW FUNCTIONS IN <schema> для проверки функции.

  • Вы не полностью указали имя qualify, и результат VALUES current_schema() не соответствует квалифицированному имени функции?

    Qualify functionName с schema и catalog, или выполните USE SCHEMA для set неявного schema.

  • Вы ссылались на временную функцию, но она была в предыдущем, истекном или другом сеансе?

    Повторно создайте временную функцию с помощью CREATE TEMPORARY FUNCTION <routineName> …или переключитесь на использование сохраненной функции.

  • Вы хотите выдать инструкцию DDL, например DROP FUNCTION только в случае существования объекта?

    Выполните инструкцию IF EXISTS , используя предложение, например: DROP FUNCTION <routineName> IF EXISTS.

  • Знаете ли вы, что функция существует, но вы не видите ее в SHOW FUNCTIONS?

    Обратитесь к администратору, чтобы получить доступ get к функции. Вам также может потребоваться доступ к schema и catalog.

Дополнительные сведения об устранении ошибки см. в разделе "Разрешение функций".

Примеры

> 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