قضية مرادفات أوراكل
سؤال
السيناريو الخاص بي:
- اسم المخطط: 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;
نصائح أخرى
ملحوظة هنا
القيود على الشرطلا يمكن احتواء كائن المخطط في الحزمة.
بمعنى آخر ، لا يمكنك إنشاء مرادف لإجراء الحزمة.
لقد رأيت حلولًا حيث يتم إنشاء إجراءات غلاف (غير معبأة) واختتم مرادف عام لذلك.
لا تنتمي إلى StackOverflow