Имеются 2 переменные со значениями:
v_days1 = 30
v_days2 = 367
и ниже разделов из ALL_TAB_PARTITIONS
:
TABLE_NAME PARTITION_NAME HIGH_VALUE (LONG datatype)
TABLENAME partitionname1_P30 30
TABLENAME partitionname2_P60 60
TABLENAME partitionname3_P90 90
TABLENAME partitionname4_P120 120
TABLENAME partitionname5_P150 150
TABLENAME partitionname6_P180 180
TABLENAME partitionname7_210 210
TABLENAME partitionname8_P240 240
TABLENAME partitionname9_P270 270
TABLENAME partitionname10_P300 300
TABLENAME partitionname11_P330 330
TABLENAME partitionname12_P360 367
Как выбрать HIGH_VALUE
, которые не равны v_days1
и v_days2
в all_tab_partitions
и обрезать соответствующие разделы?
Для этого примера обрезать разделы partitionname2_P60
до partitionname11_P330
.
FOR rec IN (SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE
FROM ALL_TAB_PARTITIONS
WHERE TABLE_NAME='TABLENAME'
AND HIGH_VALUE NOT IN (v_days1, v_days2) LOOP
<TRUNCATE PARTITIONS WITH HIGH_VALUE 60 TO 333
/TRUNCATE PARTITIONS WITH HIGH_VALUE NOT EQUAL TO 30 AND 367>