Udostępnij za pośrednictwem


UNRESOLVED_ROUTINE, klasa błędów

SQLSTATE: 42883

Nie można rozpoznać funkcji <routineName> w ścieżce <searchPath>wyszukiwania .

Parametry

  • routineName: nazwa funkcji, której nie można rozpoznać.
  • searchPath: uporządkowana lista schematów, które zostały przeszukane, jeśli routineName nie został zakwalifikowany schemat.

Wyjaśnienie

Utrwalone funkcje składają się z trzech części nazw: <catalog>.<schema>.<relation>. Jeśli nie określisz wszystkich trzech części nazwy, zostanie ona niejawnie ukończona przy użyciu bieżącego wykazu lub bieżącego schematu. Jest to podobne do sposobu, w jaki katalog roboczy systemu plików wpływa na widoczne pliki, chyba że w pełni określisz ścieżkę.

Funkcje tymczasowe istnieją tylko w ramach sesji lub zapytania i nigdy nie muszą być kwalifikowane.

Najczęstszą przyczyną braku znalezienia funkcji jest:

  • Funkcja nie istnieje.
  • Nazwa funkcji jest błędnie wpisać.
  • Funkcja zdefiniowana przez użytkownika znajduje się w innym schemacie.
  • Funkcja zdefiniowana przez użytkownika nie znajduje się w bieżącym schemacie.
  • Nie można wyświetlić funkcji zdefiniowanej przez użytkownika, ponieważ nie masz dostępu.
  • Wbudowana funkcja, którą próbujesz wywołać, nie jest dostępna w tej wersji usługi Azure Databricks.

Czynności zapobiegawcze

Zniweluj błędy, przeglądając następujące elementy.

  • Czy nazwa funkcji została wpisana niepoprawnie?

    Użyj polecenia SHOW FUNCTIONS IN <schema> , aby zweryfikować poprawną nazwę funkcji.

  • Czy funkcja jest w innym schemacie?

    Jeśli funkcja znajduje się w wykazie aparatu Unity, uruchom następujące zapytanie:

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

    Spowoduje to wyświetlenie schematu w bieżącym wykazie, w którym znajduje się funkcja.

    Jeśli funkcja znajduje się poza wykazem aparatu Unity, użyj polecenia SHOW SCHEMAS , aby znaleźć schematy kandydatów. Użyj SHOW FUNCTIONS IN <schema> polecenia , aby sondować funkcję.

  • Czy nazwa nie została w pełni kwalifikowana, a wynik VALUES current_schema() polecenia nie jest zgodny z kwalifikowaną nazwą funkcji?

    Zakwalifikuj functionName schemat i katalog lub uruchom polecenie USE SCHEMA , aby ustawić niejawny schemat.

  • Czy odwołujesz się do funkcji tymczasowej, ale była ona w poprzedniej, wygasłej lub innej sesji?

    Utwórz ponownie funkcję tymczasową przy użyciu metody CREATE TEMPORARY FUNCTION <routineName> …lub przełącz się na używanie utrwalonej funkcji.

  • Czy chcesz wydać instrukcję DDL, taką jak DROP FUNCTION w przypadku, gdy obiekt istnieje?

    Wydaj instrukcję przy użyciu klauzuli IF EXISTS , na przykład: DROP FUNCTION <routineName> IF EXISTS.

  • Czy wiesz, że funkcja istnieje, ale nie widzisz jej w SHOW FUNCTIONSpliku ?

    Skontaktuj się z administratorem, aby uzyskać dostęp do funkcji. Może być również potrzebny dostęp do schematu i katalogu.

Aby uzyskać więcej informacji na temat sposobu rozwiązywania błędu, zobacz Rozpoznawanie funkcji.

Przykłady

> 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