Appel répétitif d’une requête de type SELECT X INTO Y FROM T
La requête SQL suivante permet de récupérer le libellé article :
Select libelle into :wlibelle
from article
where code = :wcode
Cas 1 :
Programme A = fiche article appel du programme B (paramètre = code article)
Programme B = récupération du libellé article via la requête SQL
Dans un programme interactif (affichage d’un article par exemple), si vous voulez récupérer une valeur via un SELECT INTO, (le libellé relatif au code article par exemple), le faire par SQL ne vous posera pas de problème de performance. L’utilisateur face à son écran ne constatera pas de manque de performances.
Cas 2 :
Programme A = Batch d’édition des articles appel le programme B plusieurs milliers de fois (paramètre = code article)
Programme B = récupération du libellé article via la requête SQL
Sans optimisation, vos temps de traitement vont exploser.
Que faire dans ce cas là :
Appeler le programme B sans le fermer à chaque appel
Pour ne pas fermer les curseurs à chacune des requêtes, inclure dans le programme B l’instruction SQL : SET OPTION CLOSQLCSR = *ENDACTGRP
Fermer le programme B en fin de batch. La fermeture clos également le curseur.
Le gain est plus que significatif