Frage

Ich entwickle einen Batch-Prozess in der Peoplesoft-Anwendungs-Engine.

Ich habe Daten aus der JOB-Tabelle in die Staging-Tabelle eingefügt.

Insgesamt gibt es 120.596 Mitarbeiter, deren Daten verarbeitet werden müssen, und zwar in einer Entwicklungsumgebung.

In der Testumgebung beträgt die Anzahl der zu verarbeitenden Zeilen 249047.

Es gibt viele nicht berufsbezogene Daten, die auch für Mitarbeiter übermittelt werden müssen.

Mein Design sieht so aus, dass ich einzelne Aktualisierungsanweisungen schreibe, um die Daten in der Tabelle zu aktualisieren. Anschließend wähle ich Daten aus der Staging-Tabelle aus und schreibe sie in die Datei.

Das Update nimmt zu viel Zeit in Anspruch. Ich würde gerne eine Technik zur Feinabstimmung kennen.

Habe nach vielen Dingen gesucht und sogar versucht, sie zu verwenden /* +Append */ in der Update-Abfrage, aber es wird eine Fehlermeldung ausgegeben, sql command not ended.

Außerdem muss meine Update-Abfrage nach NvL- oder Nullwerten suchen.

Gibt es eine Möglichkeit, den Code über Stackoverflow zu teilen, ich meine, das ist eine insert,update-Anweisung, geschrieben in PeopleSoft-Aktionen, damit die Leute hier einen Blick darauf werfen können?

Bitte schlagen Sie mir eine Technik vor. Mein Ziel ist es, die Ausführung innerhalb von 5-10 Minuten abzuschließen.

Meine Update-Erklärung:

Ich habe die Ursache herausgefunden.Es handelt sich um diese Update-Anweisung

 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'), ' ') 

Um dies zu verfeinern, füge ich mithilfe von Hint den Wert contact_oprid in meine Staging-Tabelle ein.

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')

und ein Update der Staging-Tabelle durchführen:

 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'),' ') /

Dies dauert 5 Stunden, da 2 Lakhs Datenzeilen verarbeitet werden müssen.

Gibt es eine Möglichkeit, die Verarbeitung zu beschleunigen, also Hinweise oder Indizes?

Wenn ich dies nicht verwende, erfolgt die Aktualisierung anderer Werte außerdem sehr schnell und ist in 10 Minuten abgeschlossen.

Bitte helfen Sie mir dabei.

Danke.

War es hilfreich?

Lösung

Ich habe dieses Problem gelöst, die MERGE INTO TABLE-Oracle-Anweisung verwendet und jetzt dauert die Ausführung des Vorgangs 10 Minuten, einschließlich des Dateischreibvorgangs.Vielen Dank an alle für Ihre Hilfe und Vorschläge.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top