سؤال

لدي مخططين:أ و ب (أوراكل 9).في A يوجد رابط dblink إلى B.يوجد في B حزمة أتصل بها من A.يمكن أن تؤدي الإجراءات في الحزمة B إلى إرجاع نتائج عدد متفاوتة وأعتقد أن إرجاع المجموعة هو طريقة أفضل لهذا السبب.

create type B.tr_rad as object (
  name     varchar2(64)
 ,code     number
 ,vendor   number
 ,val      varchar2(255)
 ,num      number
);

create type B.tt_rad as varray(256) of B.tr_rad;

لكن من المخطط لا يمكنني استخدام نوع tt_rad لأن استخدام أنواع SQL بواسطة dblink غير مدعوم.DBMS_SQL غير مدعوم بالمؤشرات.من المستحيل إنشاء أنواع بنفس معرف الكائن (OID).

أعتقد أن استخدام الجداول المؤقتة.لكن أولاً، الأمر ليس جيدًا (بعد أن تقوم الدالة البعيدة بإرجاع القيمة، يجب على جانب الاتصال تحديد المجموعة من الجدول البعيد).وهناك مخاوف من تباطؤ العمل بالطاولات المؤقتة.

ربما من يعرف التفاعل البديل؟

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

المحلول

لقد واجهت مشاكل مماثلة في الماضي.ثم توصلت إلى استنتاج مفاده أن روابط قاعدة البيانات الخاصة بـ Oracle "معطلة" بشكل أساسي لأي شيء سوى أنواع SQL البسيطة (خاصة UDT، وقد تواجه CLOBS مشكلات، وقد تواجه XMLType أيضًا).إذا تمكنت من تشغيل حل OID، حظًا سعيدًا لك.

كان الحل الذي لجأت إليه هو استخدام إجراء Java Stored، بدلاً من رابط DB.

خصائص الإجراء المخزن في Java:

  1. يمكن إرجاع "مجموعة غنية من الأنواع"، فقط جميع الأنواع المعقدة (UDT's، الجداول/المصفوفات/المصفوفات) انظر أوراكل الوثائق على الانترنت للتفاصيل.تقوم Oracle بعمل أفضل بكثير في تنظيم الأنواع المعقدة (أو الغنية) من Java مقارنةً بـ DBLink.
  2. يمكن لـ Java المخزنة الحصول على "الاتصال الافتراضي" (يتم تشغيله في نفس الجلسة مثل اتصال SQL بقاعدة البيانات - لا توجد مشكلات في المصادقة).
  3. تستدعي Java المخزنة عملية PL/SQL على قاعدة البيانات البعيدة، وتقوم طبقة Java JDBC بالتنظيم من قاعدة البيانات البعيدة.
  4. تقوم Java المخزنة بحزم النتيجة وإرجاع النتائج إلى طبقة SQL أو PL/SQL.

إنه قليل من العمل، ولكن إذا كان لديك القليل من جافا، فيجب أن تكون قادرًا على "قص ولصق" الحل معًا من وثائق وعينة Oracle.

آمل أن يساعد هذا.

نصائح أخرى

التفاعل البديل هو أن يكون واحد قاعدة بيانات تحتوي على المخططين A وB بدلاً من قاعدتي بيانات مع رابط قاعدة البيانات.

بلدي الحل.على الجانب ب أقوم بإنشاء جدول مؤقت مثل سجل المجموعة.في ال أ الجانب لدي غلاف DBMS_SQL يستدعي الإجراء عبر dblink.يقوم هذا الإجراء بكتابة مجموعة النتائج في الجدول المؤقت.بعد إكمال الإجراء البعيد بنجاح، قمت بتحديد النتائج من الجدول المؤقت البعيد وتحويلها إلى نوع المجموعة المحلية.

القيود 1.الحاجة إلى مزامنة الكائن الدائم.2.استحالة استخدام إجراء الجانب (الذي يستدعي الإجراء البعيد) في استعلام SQL.3.تعقيد الاستخدام.

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