مشاركة عبر


فئة الخطأ UNRESOLVED_ROUTINE

SQLSTATE: 42883

يتعذر حل الدالة <routineName> في مسار <searchPath>البحث .

المعلمات

  • اسم الروتين: اسم الدالة التي لا يمكن حلها.
  • searchPath: القائمة مرتبة من المخططات التي تم البحث فيها إذا routineName لم يكن المخطط مؤهلا.

الشرح

تتكون الدالات المستمرة من ثلاثة أجزاء اسم: <catalog>.<schema>.<relation>. إذا لم تحدد كافة الأجزاء الثلاثة من الاسم، يتم إكماله ضمنيا باستخدام الكتالوج الحالي أو المخطط الحالي. هذا مشابه للطريقة التي يؤثر بها دليل العمل لنظام الملفات على الملفات التي يمكنك رؤيتها، ما لم تحدد المسار بالكامل.

الوظائف المؤقتة موجودة فقط داخل جلسة العمل أو الاستعلام ويجب ألا تكون مؤهلة أبدا.

السبب الأكثر شيوعا لعدم العثور على دالة هو:

  • الدالة غير موجودة.
  • اسم الدالة به خطأ إملائي.
  • توجد الدالة المعرفة من قبل المستخدم في مخطط مختلف.
  • لا توجد الدالة المعرفة من قبل المستخدم في المخطط الحالي.
  • لا يمكنك عرض الدالة المعرفة من قبل المستخدم لأنه ليس لديك حق الوصول.
  • الوظيفة المضمنة التي تحاول استدعاؤها غير متوفرة في هذا الإصدار من Azure Databricks.

التخفيف

التخفيف من الأخطاء من خلال مراجعة ما يلي.

  • هل قمت بتهجئة اسم الدالة بشكل غير صحيح؟

    استخدم SHOW FUNCTIONS IN <schema> للتحقق من اسم الدالة الصحيح.

  • هل الدالة في مخطط مختلف؟

    إذا كانت الدالة موجودة على كتالوج في كتالوج Unity، فقم بتشغيل الاستعلام التالي:

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

    يسرد هذا المخطط داخل الكتالوج الحالي حيث توجد الدالة.

    إذا كانت الدالة موجودة خارج كتالوج Unity، فاستخدم SHOW SCHEMAS للعثور على مخططات المرشح. استخدم SHOW FUNCTIONS IN <schema> لفحص الدالة.

  • هل لم تتأهل الاسم بشكل كامل، ولا تتطابق نتيجة VALUES current_schema() مع الاسم المؤهل للدالة؟

    مؤهل functionName مع المخطط والكتالوج الخاص به، أو قم بتشغيل USE SCHEMA لتعيين المخطط الضمني.

  • هل أشرت إلى دالة مؤقتة، ولكنها كانت في جلسة سابقة أو منتهية الصلاحية أو مختلفة؟

    أعد إنشاء الدالة المؤقتة باستخدام CREATE TEMPORARY FUNCTION <routineName> …، أو قم بالتبديل إلى استخدام دالة مستمرة.

  • هل تريد إصدار عبارة DDL، مثل DROP FUNCTION فقط في حالة وجود الكائن؟

    إصدار العبارة IF EXISTS باستخدام عبارة ، مثل: DROP FUNCTION <routineName> IF EXISTS.

  • هل تعرف أن الدالة موجودة، ولكن لا يمكنك رؤيتها في SHOW FUNCTIONS؟

    اتصل بالمسؤول للوصول إلى الدالة. قد تحتاج أيضا إلى الوصول إلى المخطط والكتالوج.

لمزيد من المعلومات حول كيفية حل الخطأ، راجع تحليل الدالة.

الأمثلة

> 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