En regardant la ligne :
OD.DATE2 BETWEEN '08/03/2015' AND '08/03/2016'
Puis '08/03/2015'
et '08/03/2016'
sont des chaînes littérales et non des dates.
Oracle tentera une conversion implicite d'un littéral de chaîne en une date en utilisant votre NLS_DATE_FORMAT
paramètre de session comme masque de format et si cela ne fonctionne pas, une erreur sera générée.
La solution simple consiste à ne pas utiliser de littéraux de chaîne, mais plutôt des littéraux de date :
SELECT 'M'||to_char( DATE2, 'MM' ) PERIODE,
count(*) DATA,
DCCPT
FROM BDD
WHERE BDD = 'phone'
AND SENS = 'Ent'
AND DCCPT IN ( 'PIOLUC' )
AND DATE2 BETWEEN DATE '2015-03-08' AND DATE '2016-03-08'
GROUP BY
'M'||to_char( DATE2, 'MM' ),
DCCPT
Mais vous pouvez également spécifier le masque de format :
OD.DATE2 BETWEEN TO_DATE( '08/03/2015', 'DD/MM/YYYY' ) AND TO_DATE( '08/03/2016', 'DD/MM/YYYY' )