Bonjour,
Sur une procedure PL/SQl, j'ai un petit souci de performance (ORACLE 9i).
Voici ma requete :
Cet update va se faire environ 200000 fois (à la louche) ce qui entraine que la sous requete de l'update est longue.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 FOR i IN 1 .. listeParcelleRefId.count LOOP UPDATE ASSOCIATION a1 SET PARCELLE_REF_ID = idParcelleRefNew WHERE a1.PARCELLE_REF_ID = listeParcelleRefId(i) AND exists (SELECT null FROM PARCELLE p , DOSSIER d WHERE a1.PARCELLE_ID = p.PARCELLE_ID AND p.DOSSIER_ID = d.DOSSIER_ID AND p.PARCELLE_PEC = 1 AND d.CAMPAGNE_ID = idNewCampagne_);
Ce qui est embetant, c est que cette sous requete est la même quelque soit l'instant de l'update.
J'ai essayé de récupérer tous les identifiants de la table ASSOCIATION est de les stocker dans une liste :
Mais cela ne marche pas, il n'aime pas listeIdsAssociation.EXISTS(ASSOCIATION_ID).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 SELECT ASSOCIATION_ID BULK COLLECT INTO listeIdsAssociation FROM ASSOCIATION a, PARCELLE p , DOSSIER d WHERE a.PARCELLE_ID = p.PARCELLE_ID AND p.DOSSIER_ID = d.DOSSIER_ID AND p.PARCELLE_PEC = 1 AND d.CAMPAGNE_ID = idNewCampagne_; FOR i IN 1 .. listeParcelleRefId.count LOOP UPDATE ASSOCIATION SET PARCELLE_REF_ID = idParcelleRefNew WHERE (listeIdsAssociation.EXISTS(ASSOCIATION_ID)) = TRUE;
Auriez vous une petite idée vers laquelle je pourrais m'orienter pour ne pas avoir à répéter la récupérations des lignes que je dois modifier, sachant qu'elle sera toujours la meme du début à la fin du traitement.
Merci d'avance.
Vincent
Partager