Domanda di aggiornamento della sintonizzazione fine
-
26-12-2019 - |
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.
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.