Domanda

Sto sviluppando un processo batch nel motore di applicazione PeopleSoft.

Ho inserito i dati nella tabella di stadiazione dalla tabella di lavoro.

Ci sono 120.596 dipendenti in totale, i cui dati devono essere elaborati, questo è in ambiente di sviluppo.

Nell'ambiente di test, il numero di righe da elaborare è 249047.

Ci sono molti dati non di lavoro che devono anche essere inviati per i dipendenti.

Il mio design è in tal modo in cui scriverò le istruzioni di aggiornamento individuali per aggiornare i dati nella tabella, selezionerò i dati dalla tabella di staging e lo scriverò nel file.

L'aggiornamento sta prendendo troppo tempo, vorrei conoscere una tecnica per sintonizzarlo.

cercato per molte cose e persino provato a utilizzare /* +Append */ nella query di aggiornamento, ma getta un messaggio di errore, sql command not ended.

Inoltre, la mia query di aggiornamento deve controllare i valori NVL o NULL.

C'è un modo per condividere il codice su Stackoverflow, intendo, questo è inserito, l'istruzione di aggiornamento, scritta nelle azioni PeopleSoft, in modo che le persone qui possano dare un'occhiata a questo?

gentilmente suggerirmi una tecnica, il mio obiettivo è finire l'esecuzione entro 5-10 minuti.

La mia dichiarazione di aggiornamento:

Ho capito la causa. È questa dichiarazione di aggiornamento

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

Al fine di sintonizzare questo, sto inserendo il valore contact_oprid nella mia tabella di staging, usando il suggerimento.

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

e facendo un aggiornamento sulla tabella di staging:

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

Ci vorranno 5 ore, poiché deve elaborare 2 file di dati di lakh.

C'è un modo utilizzando il quale l'elaborazione può essere accelerata, intendo, utilizzando suggerimenti o indici?

Inoltre, se non lo uso, l'elaborazione per aggiornare altro valore è molto veloce, viene rifinito in 10 minuti.

gentilmente aiutami con questo.

Grazie.

È stato utile?

Soluzione

Ho risolto questo, usato Unisci nella tabella Oracle Dichiarazione, e ora il processo richiede 10 minuti per essere eseguito, inclusa il funzionamento di scrittura di file.Grazie per il tuo aiuto e suggerimenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top