Question

Je suis en train d'élaborer un processus de traitement par lots dans l'application peoplesoft moteur.

J'ai inséré des données dans la mise en scène de la table de TRAVAIL de la table.

Il y a 120,596 employés au total, dont les données doivent être traitées, c'est dans un environnement de développement.

Dans l'environnement de test, le nombre de lignes à traiter est 249047.

Il y a beaucoup de données sur l'emploi qui doivent aussi être envoyés pour les employés.

Ma conception est d'une telle façon que je vais écrire des instructions update pour mettre à jour les données dans la table, puis je sélectionne les données à partir de la mise en scène de la table et de l'écrire dans le fichier.

La mise à jour est prendre trop de temps, je voudrais savoir une technique permettant de l'affiner.

Recherché pour beaucoup de choses, et même essayé d'utiliser /* +Append */ dans la requête de mise à jour, mais il jette un message d'erreur, sql command not ended.

Aussi, ma requête de mise à jour a pour vérifier nvl ou les valeurs null.

Est-il possible de partager le code sur stackoverflow, je veux dire, c'est l'insertion,de mise à jour de la déclaration, écrite dans peoplesoft actions, de sorte que les gens d'ici peuvent avoir un coup d'oeil à cela?

Veuillez me suggérer une technique, mon objectif est de terminer l'exécution dans les 5-10 minutes.

Mon instruction de mise à jour:

J'ai compris la cause.C'est cette instruction de mise à jour

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

Afin d'affiner ce,je suis de l'insertion de la valeur contact_oprid dans ma mise en scène de la table, à l'aide de l'indice.

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

et de faire une mise à jour sur la mise en scène de la table:

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

Cela prendra 5 heures, comme il l'a traiter 2 lakhs de lignes de données.

Est-il possible à l'aide de lequel le traitement peut être prendre de la vitesse, je veux dire, à l'aide d'indicateurs ou d'indices?

Aussi, si je n'utilise pas cette, le traitement de mise à jour autre valeur est très rapide, se fini en 10 minutes.

De bien vouloir m'aider avec cela.

Merci.

Était-ce utile?

La solution

J'ai résolu ce, utilisé de FUSION DANS la TABLE oracle déclaration, et maintenant, le processus ne prend que 10 minutes à exécuter, y compris l'écriture de fichier de l'opération.Merci à tous pour votre aide et suggestions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top