У меня есть большая (150 м + строка) таблица, которая разбивается на четверти с использованием ключа разделения DATE.
Когда я запрашиваю таблицу, используя что-то вроде ...
SELECT *
FROM LARGE_TABLE
WHERE THE_PARTITION_DATE >= TO_DATE('1/1/2009', 'DD/MM/YYYY')
AND THE_PARTITION_DATE < TO_DATE('1/4/2009', 'DD/MM/YYYY');
... сокращение разделов работает корректно ... optomiser может понять, что ему нужно только взглянуть на один раздел (в данном случае первый квартал 2009 года).EXPLAIN PLAN показывает «SINGLE RANGE RANGE»
Однако, когда я перемещаю этот запрос в PL / SQL и передаю те же даты, что и переменные, план отображается как «RANGE PARTITION (ITERATOR)»optomiser не может понять, что ему нужно только смотреть на отдельную часть (вероятно, потому что у него нет фактических значений при оценке плана).
Единственный обходной путь, который я нашел до сих пор, этозакодировать EXECUTE IMMEDIATE, включая даты в строке SQL, чтобы корректно обрезать раздел.
Есть ли лучший способ?