Bonjour,

J'aimerais savoir s'il y a un moyen de ne pas plomber les performances lorsque qu'on fait un update où certaines clauses du WHERE sont à NULL.

Je m'explique :

Ce premier est update est très rapide mais si une des colonnes est a null (et donc sa valeur recc* également) la ligne n'est pas mise à jour :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
update TMEEVP                                        
set numseq = recc0                                   
where business_unit = recc1                          
and datsitu = recc2                                  
and prdet=recc3                  
and prifi=recc4                  
and foreign_currency = recc5     
and prcsv=recc6                  
and prmat=recc7                  
and prdvn=recc8                  
and prflx = recc9                
and prsem= recc10                
and paemt = recc11;
Pour info, Les valeurs recc* sont retournées par un curseur

Alors que celui met à jour l'exhaustivité des lignes mais avec des performances très dégradées (business_unit et datsitu ne peuvent etre null):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
update TMEEVP                                       
set numseq = recc0                              
where business_unit = recc1                     
and datsitu = recc2                             
and nvl(prdet, 'A')=nvl(recc3, 'A')             
and nvl(prifi, 'A')=nvl(recc4, 'A')             
and nvl(foreign_currency, 'A') = nvl(recc5, 'A')
and nvl(prcsv, 'A')=nvl(recc6, 'A')             
and nvl(prmat, 'A')=nvl(recc7, 'A')             
and nvl(prdvn, 'A')=nvl(recc8, 'A')             
and nvl(prflx, 'A') = nvl(recc9, 'A')           
and nvl(prsem, 'A')= nvl(recc10, 'A')           
and nvl(paemt, 'A') = nvl(recc11, 'A');
Connaissez-vous une solution à ce problème ?

D'avance merci