Oracle 10g

PRO*C
À l'exécution du programme qui contient la requête suivante :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
EXEC SQL
SELECT /*+ INDEX(COM_REC I1_COM_REC) */ *
  FROM COM_REC
 WHERE DATDEB_COM >= TO_DATE('19000101', 'YYYYMMDD');

L'index n'est jamais utilisé, on passe systématiquement par un table full scan
le hint index n'est pas pris en compte.

SQL*Plus
À l'exécution de la même requête sous SQL*Plus, on passe bien par l'index :

Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
SQL>set autotrace traceonly explain
SQL>select /*+ index(com_rec i1_com_rec) */
  2  * from com_rec where datdeb_com >= to_date( '19000101','YYYYMMDD');
 
Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=0 Card=1 Bytes=469)
   1    0   TABLE ACCESS (BY INDEX ROWID) OF 'COM_REC' (TABLE) (Cost=0
           Card=1 Bytes=469)
 
   2    1     INDEX (RANGE SCAN) OF 'I1_COM_REC' (INDEX) (Cost=0 Card=
          1)

Pourquoi cette différence de comportement entre le PRO*C et SQL*Plus ?