Динамическое получение диапазона дат партиций 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
Комментарии
Отправить комментарий