Ну, это не в строке 7. Проблема в том, что "час" на некотором уровне преобразуется в строку (to_char), но после этого сравнивается с датой, и неявное преобразование не всегда работает. Исправленный запрос:
SELECT hour
FROM (WITH all_hours AS
(
SELECT TO_DATE ('2000-01-01', 'yyyy-mm-dd')
+ NUMTODSINTERVAL (LEVEL - 1, 'hour') hour
FROM DUAL
CONNECT BY LEVEL <= 1000000
)
SELECT TO_CHAR (h.hour, 'yyyy-mm-dd hh:mi am') hour, h.hour as hourdate
FROM all_hours h
GROUP BY h.hour)
WHERE hourdate BETWEEN TO_DATE ('2009-11-10 01:00 am', 'yyyy-mm-dd hh:mi am')
AND TO_DATE ('2009-11-10 01:00 am', 'yyyy-mm-dd hh:mi am')