سؤال

أنا تطوير عملية دفعة في محرك تطبيق بيبول.

لقد أدرجت البيانات في جدول التدريج من جدول الوظائف.

هناك 120 ، 596 موظفا في المجموع ، يجب معالجة بياناتهم ، وهذا في بيئة التطوير.

في بيئة الاختبار ، عدد الصفوف المراد معالجتها هو 249047.

هناك العديد من البيانات غير المهمة التي يجب أيضا إرسالها للموظفين.

تصميمي هو في مثل هذه الطريقة التي سوف أكتب بيانات التحديث الفردية لتحديث البيانات في الجدول ، ثم سأحدد البيانات من الجدول التدريج والكتابة في الملف.

التحديث يأخذ الكثير من الوقت ، وأود أن أعرف تقنية لتهذيب ذلك.

بحثت عن أشياء كثيرة ، وحتى حاولت استخدام /* +Append */ في استعلام التحديث ، لكنه يلقي رسالة خطأ, sql command not ended.

أيضا ، استعلام التحديث الخاص بي للتحقق من نفل أو قيم فارغة.

هل هناك أي طريقة لمشاركة الكود عبر ستاكوفيرفلو, انا اعني, هذا هو إدراج, بيان التحديث, مكتوب في إجراءات بيبول, حتى يتمكن الأشخاص هنا من إلقاء نظرة على ذلك?

يرجى اقتراح لي تقنية ، هدفي هو الانتهاء من التنفيذ في غضون 5-10 دقائق.

بيان التحديث الخاص بي:

لقد اكتشفت السبب.هذا هو بيان التحديث

 UPDATE %Table(AZ_GEN_TMP) 
  SET AZ_HR_MANAGER_ID = NVL(( 
 SELECT e.emplid 
  FROM PS_EMAIL_ADDRESSES E 
 WHERE UPPER(SUBSTR(E.EMAIL_ADDR, 0, INSTR(E.EMAIL_ADDR, '@') -1)) = ( 
 SELECT c.contact_oprid 
  FROM ps_az_can_employee c 
 WHERE c.emplid = %Table(AZ_GEN_TMP).EMPLID 
   AND c.rolename='HRBusinessPartner' 
   AND c.seqnum = ( 
 SELECT MAX(c1.seqnum) 
  FROM ps_az_can_employee c1 
 WHERE c1.emplid= c.emplid 
   AND c1.rolename= c.rolename ) ) 
   AND e.e_addr_type='PINT'), ' ') 

من أجل ضبط هذا ، أقوم بإدخال قيمة الاتصال في جدول التدريج الخاص بي ، باستخدام تلميح.

SELECT /* +ALL_ROWS */ c.contact_oprid 
      FROM ps_az_can_employee c 
     WHERE c.emplid = %Table(AZ_GEN_TMP).EMPLID 
       AND c.rolename='HRBusinessPartner' 
       AND c.seqnum = ( 
     SELECT MAX(c1.seqnum) 
      FROM ps_az_can_employee c1 
     WHERE c1.emplid= c.emplid 
       AND c1.rolename= c.rolename ) ) 
       AND e.e_addr_type='PINT')

والقيام بتحديث على جدول التدريج:

 UPDATE staging_table
  SET AZ_HR_MANAGER_ID = NVL(( 
 SELECT e.emplid 
  FROM PS_EMAILtable E 
 WHERE UPPER(REGEXP_SUBSTR(e.email_addr,'[^@]+',1,1)) = staging_table.CONTACT_OPRID 
   AND e.e_addr_type='PINT'),' ') /

وهذا سوف يستغرق 5 ساعات ، كما أن لديها لمعالجة 2 كهس صفوف من البيانات.

هل هناك أي طريقة يمكن من خلالها تسريع المعالجة, انا اعني, باستخدام تلميحات أو فهارس?

أيضا ، إذا كنت لا تستخدم هذا ، وتجهيز لتحديث قيمة أخرى سريعة جدا ، ويحصل على الانتهاء في 10 دقيقة.

يرجى مساعدتي مع هذا.

شكرا.

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

المحلول

لقد حل هذا ، وتستخدم دمج في بيان أوراكل الجدول ، والآن تستغرق العملية 10 دقيقة لتنفيذ ، بما في ذلك عملية كتابة الملف.شكرا جميعا على المساعدة والاقتراحات الخاصة بك.

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