Skip to main content

[26ai] Nuevas columnas %_TAB_PARTITIONS

Updated 3 min readMarkdown
Part of seriesOCI
[26ai] Nuevas columnas %_TAB_PARTITIONS

En el artículo de hoy, vamos a ver una nueva mejora introducida en la vista %_TAB_PARTITIONS. Una mejora muy útil porque es una columna muy usada en el día a día aun siendo un campo de tipo long. Ya sabemos de las limitaciones de este campo y los quebraderos de cabeza que suele dar al manejar información en ese tipo de columnas.

Las dos nuevas columnas son HIGH_VALUE_CLOB y HIGH_VALUE_JSON, ambas columnas tiene la misma información que HIGH_VALUE.

SQL>
Select column_name, data_type  
  From dba_tab_cols 
 Where table_name = 'DBA_TAB_PARTITIONS' 
   And column_name like 'HIGH_VALUE%'

COLUMN_NAME             DATA_TYPE
--------------------    -------------------------------------
HIGH_VALUE_CLOB           CLOB
HIGH_VALUE_JSON           JSON
HIGH_VALUE                LONG

Creo que esto es un gran acierto, sobre todo el formato json. Cada vez más usado en los clientes el formato json, por las facilidades que da para manejar la información.

Para ver la información de estás nuevas columnas, vamos a definir una tabla particionado en nuestra base de datos.

SQL> 
Create table test_nuevas_columnas (
    id        INTEGER GENERATED BY DEFAULT AS IDENTITY,
    registro  Date,
    valor      varchar2(100 Char)
) 
partition by range (registro)
 interval ( numtoyminterval(1,'MONTH'))
  (
    PARTITION P01 VALUES LESS THAN ( to_date('01-01-2026','dd/mm/yyyy')),
    PARTITION P02 VALUES LESS THAN ( to_date('01-02-2026','dd/mm/yyyy')),
    PARTITION P03 VALUES LESS THAN ( to_date('01-03-2026','dd/mm/yyyy')),
    PARTITION P04 VALUES LESS THAN ( to_date('01-04-2026','dd/mm/yyyy')),
    PARTITION P05 VALUES LESS THAN ( to_date('01-05-2026','dd/mm/yyyy')),
    PARTITION P06 VALUES LESS THAN ( to_date('01-06-2026','dd/mm/yyyy')),
    PARTITION P07 VALUES LESS THAN ( to_date('01-07-2026','dd/mm/yyyy')),
    PARTITION P08 VALUES LESS THAN ( to_date('01-08-2026','dd/mm/yyyy')),
    PARTITION P09 VALUES LESS THAN ( to_date('01-09-2026','dd/mm/yyyy'))
  );

Procedemos a visualizar la información.

High_Value

Visualización clásica para versiones anteriores a 26ai.

SQL>
Select partition_name, high_value 
  From dba_tab_partitions 
 Where table_name = 'TEST_NUEVAS_COLUMNAS'


PARTIT_NAME  HIGH_VALUE_JSON
------------ --------------------------------------------------
P01          TO_DATE(' 2026-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
P02          TO_DATE(' 2026-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
P03          TO_DATE(' 2026-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
P04          TO_DATE(' 2026-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
P05          TO_DATE(' 2026-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
P06          TO_DATE(' 2026-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
P07          TO_DATE(' 2026-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
P08          TO_DATE(' 2026-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
P09          TO_DATE(' 2026-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')

High_Value_Json

Aquí podemos usar la función JSON_SERIALIZE o la función JSON_VALUE. Ambas funciones son válidas para revelar la definición de la partición.

SQL> 
Select partition_name, 
       Json_Value(high_value_json,'$.high_value') high_value_json 
  from dba_tab_partitions 
 Where table_name = 'TEST_NUEVAS_COLUMNAS';

PARTITION_NAME  HIGH_VALUE_JSON
--------------- --------------------------------------------------
P01             2026-01-01T00:00:00
P02             2026-02-01T00:00:00
P03             2026-03-01T00:00:00
P04             2026-04-01T00:00:00
P05             2026-05-01T00:00:00
P06             2026-06-01T00:00:00
P07             2026-07-01T00:00:00
P08             2026-08-01T00:00:00
P09             2026-09-01T00:00:00

SQL> 
Select partition_name, json_serialize(high_value_json) high_value_json 
  From dba_tab_partitions 
 Where table_name = 'TEST_NUEVAS_COLUMNAS';

PARTIT_NAME  HIGH_VALUE_JSON
------------ --------------------------------------------------
P01          {"high_value":"2026-01-01T00:00:00"}
P02          {"high_value":"2026-02-01T00:00:00"}
P03          {"high_value":"2026-03-01T00:00:00"}
P04          {"high_value":"2026-04-01T00:00:00"}
P05          {"high_value":"2026-05-01T00:00:00"}
P06          {"high_value":"2026-06-01T00:00:00"}
P07          {"high_value":"2026-07-01T00:00:00"}
P08          {"high_value":"2026-08-01T00:00:00"}
P09          {"high_value":"2026-09-01T00:00:00"}

Incluso podemos indicar el formato de salida que queremos mostrar.

SQL> 
Select
  partition_name, 
  Json_Value(high_value_json,'$.high_value' returning Date) high_value_json 
  From dba_tab_partitions where table_name = 'TEST_NUEVAS_COLUMNAS';

PARTITION_NA HIGH_VALUE_JSON
------------ -----------------------------------------
P01          01-01-2026 00:00:00
P02          02-01-2026 00:00:00
P03          03-01-2026 00:00:00
P04          04-01-2026 00:00:00
P05          05-01-2026 00:00:00
P06          06-01-2026 00:00:00
P07          07-01-2026 00:00:00
P08          08-01-2026 00:00:00
P09          09-01-2026 00:00:00

High_Value_Clob

Visualización de la información en formato clob.

SQL> 
 Select partition_name, high_value_clob  
   From dba_tab_partitions where table_name = 'TEST_NUEVAS_COLUMNAS'


PARTITION_NA HIGH_VALUE_CLOB
------------ --------------------------------------------------------------
P01          TO_DATE(' 2026-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
P02          TO_DATE(' 2026-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
P03          TO_DATE(' 2026-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
P04          TO_DATE(' 2026-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
P05          TO_DATE(' 2026-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
P06          TO_DATE(' 2026-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
P07          TO_DATE(' 2026-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
P08          TO_DATE(' 2026-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
P09          TO_DATE(' 2026-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')

Espero que os guste. ¡Nos vemos en el próximo artículo!

2 views

About the author

  • Ingeniero informático, Oracle ACE, DBA y Arquitecto OCI, con más de 15 años de experiencia en plataformas Oracle. Certificado en OCI Certified Architect Professional y OCI Migration and Integration Certified Professional.

No comments yet. Be the first to comment.