سؤال

السيناريو الخاص بي:

  • اسم المخطط: Schema1
  • اسم الحزمة: PKG_SYSTEM
  • اسم الإجراء: Proc1

الآن أحاول إنشاء مرادفات لـ Proc1 على النحو التالي

CREATE PUBLIC SYNONYM call_proc FOR schema1.pkg_system.proc1;

... لكنها أعطتني خطأ في بناء الجملة.

ORA-00933: SQL command not properly ended

لقد غيرت الرمز على النحو التالي:

CREATE PUBLIC SYNONYM call_proc FOR pkg_system.proc1;

يمكنني إنشاء المرادفات بنجاح ، لكن عندما حاولت تنفيذ الإجراء المخزن عبر المرادف:

EXEC call_proc

... حصلت على الخطأ التالي:

ORA-06550: line 1, column 7:
PLS-00201: identifier call_proc must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

وقد استخدمت اسم المخطط للاتصال بالإجراء مثل schema1.call_Proc لا يزال لديه نفس الخطأ.

ماذا فعلت خطأ هنا؟

هل كانت مفيدة؟

المحلول

طريقة واحدة للتغلب على هذا القيد ، على افتراض أنك بحاجة حقًا إلى استدعاء الإجراء باسم واحد (لأي سبب من الأسباب) ، يمكنك لفه في إجراء على مستوى المخطط:

CREATE PROCEDURE schema1.proc1 IS
BEGIN
   pkg_system.proc1;
END;

CREATE PUBLIC SYNONYM proc1 FOR schema1.proc1;

نصائح أخرى

ملحوظة هنا

القيود على الشرطلا يمكن احتواء كائن المخطط في الحزمة.

بمعنى آخر ، لا يمكنك إنشاء مرادف لإجراء الحزمة.

لقد رأيت حلولًا حيث يتم إنشاء إجراءات غلاف (غير معبأة) واختتم مرادف عام لذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top