Bonjour,

Dans le cadre de l'optimisation de nos traitements, je m'occupe d'un accesseur cobol à une table DB2 sous ZOS.
La requète sql est assez basique :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
EXEC SQL              
DECLARE CURSEUR 
CURSOR FOR            
SELECT   REFERENCE,      
             NUMERO, 
             ...
FROM  TABLE_REF                                
WHERE   PART    =       :W-IN-PART        
AND     NUMERO    =       :W-IN-NUMERO        
AND     SIRET    BETWEEN :W-IN-SIRET-INF AND
                        :W-IN-SIRET-SUP
...
             FOR FETCH ONLY       
OPTIMIZE FOR 20 ROWS 
END-EXEC.
Le numéro avec lequel on accède au données de la base peut retourner plus de 2000 références.
L'utilisateur renseigne donc un type en entrée pour cibler les références voulues.
Le type pouvant prendre plusieurs valeurs, le programme en entrée reçoit ainsi une table avec toutes les valeurs désirées pour le numéro.
Le nombre d'indices valorisés de la table est variable:
Ex: TYPE = 148 (3 valeurs -> 1, 4 et 8)
TYPE = 1235689(7 valeurs -> 1,2,3,5,6,8 et 9)

Ne pouvant pas créer une requète dynamique, la selection de réferences selon les types voulues est effectué en cobol.
Le problème est que pour certains numéros avec énormément de références et trés peu correspondant aux types en entrée, le nombre d'ordre db2 devient vite trés élevé!(on fetch jusqu'à obtenir les bons candidats).

J'aimerai donc ne plus gérer le TYPE au niveau Cobol mais en SQL pour diminuer le nombre de fetchs.

Savez vous s'il y a l'équivalent en db2 de la fonction contains?
Ainsi je placerai le prédicat suivant dans ma requète

Code : Sélectionner tout - Visualiser dans une fenêtre à part
WHERE CONTAINS(:W-TYPE, TYPE)
Merci d'avance pour votre réponse et n'hésitez pas si vous voyez d'autres solutions.