Bonjour,

J'ai une requête qui utilise du PL/SQL du genre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
SELECT TH.LIBELLE ,
       QUES.LIBELLE ,
       PACKAGEPLSQL.function (BTH.IDTH)
          ColPLSQL,
       TH.IDTH
  FROM  BTH, TH, QUES
 WHERE     TH.IDTHREF = BTH.IDTH
       AND TH.NIQUEST = QUES.NIQUEST
       AND (    
            BTH.DATEVALEUR >= 201307011503
            AND BTH.DATEVALEUR <= 201307051503
                   )
qui s'execute correctement (d'un point vu temps d'execution).

Je voudrais maintenant ajouter un filtre sur le resultat de mon package PL/SQL

J'ai essayé comme ça

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
SELECT TH.LIBELLE ,
       QUES.LIBELLE ,
       PACKAGEPLSQL.function (BTH.IDTH)
          ColPLSQL,
       TH.IDTH
  FROM  BTH, TH, QUES
 WHERE     TH.IDTHREF = BTH.IDTH
       AND TH.NIQUEST = QUES.NIQUEST
       AND (    
            BTH.DATEVALEUR >= 201307011503
            AND BTH.DATEVALEUR <= 201307051503
                   )
AND PACKAGEPLSQL.function (BTH.IDTH) = 0
et

comme ca

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
 
SELECT * FROM (
SELECT TH.LIBELLE ,
       QUES.LIBELLE ,
       PACKAGEPLSQL.function (BTH.IDTH)
          ColPLSQL,
       TH.IDTH
  FROM  BTH, TH, QUES
 WHERE     TH.IDTHREF = BTH.IDTH
       AND TH.NIQUEST = QUES.NIQUEST
       AND (    
            BTH.DATEVALEUR >= 201307011503
            AND BTH.DATEVALEUR <= 201307051503
                   )
) WHERE ColPLSQL = 1
Et dans les deux cas j'ai des temps de réponse catastrophique.

J'ai essayé dans le deuxième cas d'ajouter des HINT du genre NO_QUERY_TRANSFORMATION et ca n'arrange rien.

Je commence a etre a court d'idée. Vous comprenez ce qui ne vas pas ? Ce que je pourrais tenter. Je trouve absurde de faire ce test en dans l'application plutot que dans la requete et pourtant c'est ce qui semble le plus efficae.

Merci,

FJJ