Я правильно понимаю?
Есть такой вид:
SELECT * FROM some_table, tmp_parm_rang
WHERE some_table.date_column BETWEEN tmp_parm_rang.start_date AND tmp_parm_rang.end_date;
Затем в некотором интерфейсе пользователь вводит диапазон дат, и приложение выполняет следующее:
- Удаляет все существующие строки из
TMP_PARM_RANG
- Вставляет новый ряд в
TMP_PARM_RANG со значениями пользователя
- Выбирает все строки в представлении
Интересно, зафиксированы ли или отменены изменения в TMP_PARM_RANG, и если да, то когда? Это временная таблица или обычная таблица? В основном, в зависимости от ответов на эти вопросы, процесс может быть небезопасным для нескольких пользователей для параллельного выполнения. Можно надеяться, что если бы это было так, они бы уже обнаружили это и обратились к нему, но кто знает?
Даже если это делается поточно-ориентированным способом, внесение изменений в базу данных для простых операций запросов не имеет большого смысла. Эти DELETE и INSERT генерируют redo / undo (или любой другой эквивалент в базе данных, отличной от Oracle), что совершенно не нужно.
Простой и более обычный способ достижения той же цели - выполнить этот запрос, привязав входные данные пользователя к параметрам запроса:
SELECT * FROM some_table WHERE some_table.date_column BETWEEN ? AND ?;