Динамическое получение диапазона дат партиций Oracle
Получить динамический диапазон дат в партициях можно из поля HIGH_VALUE в таблице USER_TAB_PARTITIONS. Но тут возникают проблемы что поле HIGH_VALUE имеет тип LONG и не совсем удобно с ним работать не прибегая к помощи PLSQL. Но данную проблему легко решить воспользовавшись функцией DBMS_XMLGEN.GETXMLTYPE
Реализация алгоритма на Oracle:
SELECT TABLE_NAME,
PARTITION_NAME,
PARTITION_POSITION,
CASE
WHEN PARTITION_NAME='PMAX' THEN TO_DATE('2999-12-31 00:00:00', 'yyyy-mm-dd hh24:mi:ss')+1
ELSE TO_DATE(TRIM('''' FROM REGEXP_SUBSTR(EXTRACTVALUE(DBMS_XMLGEN.
GETXMLTYPE('select high_value from user_tab_partitions where table_name=''' ||
TABLE_NAME || ''' and partition_name = ''' || PARTITION_NAME || ''''),
'//text()'),
'''.*?''')),
'syyyy-mm-dd hh24:mi:ss')
END AS HIGH_VALUE_IN_DATE_FORMAT
FROM USER_TAB_PARTITIONS
WHERE TABLE_NAME = :P_TABLE_NAME
Комментарии
Отправить комментарий