سؤال

لنفترض لدي بعض أنواع البيانات المحددة في PL / SQL:

TYPE foo_t IS RECORD (...);
TYPE foo_table_t IS TABLE OF foo_t INDEX BY BINARY_INTEGER;

TYPE bar_t IS RECORD (...);
TYPE bar_table_t IS TABLE OF bar_t INDEX BY BINARY_INTEGER;

هل من الممكن بالنسبة لي لكتابة الإجراء قادرة على قبول أي نوع البيانات المستمدة من الجدول (على سبيل المثال، إما foo_table_t أو bar_table_t) كمعلمة؟ الإجراء ليس له حاجة لمعرفة أنواع صف الجدول. والمثال تافهة:

PROCEDURE remove_last(some_table ...) IS
BEGIN
    some_table.DELETE(some_table.LAST);
END;
هل كانت مفيدة؟

المحلول

وليس مباشرة. من دليل PL / SQL مبرمج:

و"المعلمة الفعلية ومعلمة رسمية المناظرة يجب أن يكون أنواع البيانات متوافقة."

وPL / SQL لا أحد التحويل الضمني من أنواع البيانات المعلمة الفعلية لأنواع البيانات معلمة رسمية. لذلك، هل يمكن تمرير قيمة الرقم إلى الإجراء الذي يريد سلسلة، وانها ستعمل لأنه يمكنك القيام التحويل الضمني.

وأفضل ما يمكن أن يفعله هو كتابة إجراءات مثقلة:

وإجراءات عامة (فو IN OUT foo_t)؛

وإجراءات عامة (شريط IN OUT bar_t)؛

وبعد ذلك يمكنك الاتصال العام مع أي نوع السجل. هذا يفقد جاذبية بما يتناسب مع عدد من أنواع السجلات للتعامل مع :-D

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