Pregunta

Estoy desarrollando un proceso por lotes en el motor de aplicaciones de PeopleSoft.

He insertado datos en la tabla de estadificación de la tabla de trabajo.

Hay 120,596 empleados en total, cuyos datos deben ser procesados, esto se encuentra en el entorno de desarrollo.

En el entorno de prueba, el número de filas a procesar es 249047.

Hay muchos datos no laborales que también deben enviarse para los empleados.

Mi diseño es de tal manera que escribiré declaraciones de actualización individuales para actualizar los datos en la tabla, luego seleccionaré datos de la tabla de estadificación y escribiré en el archivo.

La actualización está tomando demasiado tiempo, me gustaría saber una técnica para afinarlo.

buscó muchas cosas, e incluso intentó usar /* +Append */ en la consulta de actualización, pero lanza un mensaje de error, sql command not ended.

Además, mi consulta de actualización tiene que verificar los valores NVL o NULL.

¿Hay alguna forma de compartir el código sobre StackOverFlow, quiero decir, esto es inserto, la declaración de actualización, escrita en las acciones de PeopleSoft, para que las personas aquí puedan echar un vistazo a eso?

Por favor, sugiero una técnica, mi objetivo es terminar la ejecución dentro de 5-10 minutos.

Mi declaración de actualización:

He descubierto la causa. Es esta declaración de actualización

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

Para afinar esto, estoy insertando el valor Contact_EPRID en mi tabla de estadificación, usando sugerencia.

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

y haciendo una actualización en la tabla de estadificación:

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

Esto tomará 5 horas, ya que tiene que procesar 2 filas de datos de lakhs.

¿Hay alguna forma de usar la cual se puede acelerar el procesamiento, quiero decir, usando sugerencias o índices?

Además, si no uso esto, el procesamiento para actualizar otro valor es muy rápido, se termina en 10 minutos.

amablemente ayúdame con esto.

gracias.

¿Fue útil?

Solución

He resuelto esto, usé fusionarse en la Declaración de la Tabla Oracle, y ahora el proceso tarda 10 minutos en ejecutar, incluida la operación de escritura de archivos.Gracias a todos por su ayuda y sugerencias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top