#sql #oracle #plsql
Вопрос:
У меня есть хранимая процедура, в которой я сохраняю в исторической таблице данные из другой таблицы. Однако я не хочу, чтобы моя историческая таблица стала слишком большой, и хотел бы удалить записи, которые старше 1 недели. Каков был бы наилучший подход для достижения этой цели?
INSERT INTO table_h
SELECT
*
FROM
table;
COMMIT;
Комментарии:
1. Не зная полей, которые у вас есть в TABLE_H, невозможно ответить на этот вопрос. НАДЕЮСЬ, у вас есть поле ADD_DATE или подобное, которое вы можете использовать для очистки таблицы.
2. @banana_99 У вас есть лицензия на секционирование? Это дополнительный вариант в Enterprise Edition.
3. @WilliamRobertson, как я могу это проверить?
4. Если ваша система уже использует разделение, то вы, вероятно, в порядке. В противном случае спросите своего администратора базы данных.
Ответ №1:
Ну, подход состоит в том, чтобы использовать delete
where
предложение:
delete from t
where datecol < trunc(sysdate) - interval '7' day;
Однако лучший подход, вероятно, состоит в том, чтобы разделить таблицу по неделям (или дням). Затем отбросьте разделы, когда они станут старше. Удаление раздела, как правило, происходит намного быстрее, чем удаление отдельных записей.
Комментарии:
1. Спасибо. Как я могу разделить по неделям?
2. @banana_99 . . . Место для начала находится в документации: docs.oracle.com/en/database/oracle/oracle-database/19/vldbg/. …