Bonjour,
J'essaie d'utiliser un plan d'exécution stocké pour une requête en utilisant des bind variables sur oracle 10.2.0.4:
lorsque je demande le plan de la requête
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
17
18
19
20
21
22 alter session set use_stored_outlines = test; CREATE OR REPLACE OUTLINE plan1 FOR CATEGORY test ON SELECT * FROM table WHERE STATUT IN (:v0,:v1); CREATE OR REPLACE OUTLINE plan2 FOR CATEGORY test ON SELECT /*+ INDEX(xxx) */ * FROM table WHERE STATUT IN (:v0,:v1); UPDATE OUTLN.OL$HINTS SET OL_NAME=DECODE(OL_NAME,'PLAN2','PLAN1','PLAN1','PLAN2') WHERE OL_NAME IN ('PLAN1','PLAN2'); drop outline plan2; alter session set query_rewrite_enabled=true; alter session set cursor_sharing=SIMILAR;
j'obtiens bien le plan stocké (qui utilise mon index)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT * FROM table WHERE STATUT IN (:v0,:v1);
si je demande celui de la requête
j'obtiens un autre plan au lieu de celui que j'ai stocké...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT * FROM table WHERE STATUT IN (3,4);
J'ai raté quelque chose???
Partager