Bonjour,
Je suis en train de découvrir une base de données dans le cadre d'un nouveau boulot. Je constate qu'il y a beaucoup de packages qui contiennent des procédures construites sous cette forme :
Déclaration d'un curseur C1 qui récupère certains clients sur quelques critères (date de création, dernier article acheté par exemple)
puis
Déclaration d'un curseur C2 avec en paramètre l'id_client qui fait un "count(*)" sur d'autres critères (date de dernier passage en magasin datant de moins d'un mois, panier moyen supérieur à 50€)
Déclaration d'un curseur C3 avec en paramètre l'id_client qui fait un "count(*)" sur d'autres critères (premier achat datant de plus de 5 ans, segmentation de moins de 3 mois)
(dans certaines procédures, il peut y avoir jusqu'à 10 de ces curseurs)
et finalement
une boucle sur le curseur C1, qui "fetch" le résultat des curseurs C2, C3... dans des variables V1, V2... en leur passant en paramètre l'id_client courant, et un test qui vérifie que si ces variables sont bien à 0, on garde l'id_client (que l'on insère dans un table à part pour un traitement ultérieur), et sinon on ne fait rien de l'id_client sélectionné dans le curseur C1.
Etant plutôt partisan des traitements ensemblistes, mais avant de réécrire ces procédures, je me demandais si quelqu'un voyait un intérêt à ce type de traitement ? La personne en charge de ces développements m'a dit que c'était par soucis de performance, mais j'ai du mal à voir comment ça peut être plus rapide qu'une requête "normale" qui ferait l'INSERT en prenant en compte tous les critères directement.