oracle中有大量数据,如何更新子分区表中的值?

问题描述 投票:0回答:1

这是我现有的表格:

PARTITION BY RANGE ("D0_CRD_RPT_DT") INTERVAL (NUMTOYMINTERVAL(1, 'MONTH')) 
  SUBPARTITION BY LIST ("TA_SRC_STM_CD","TA_OBJ_TP_CD") 
  SUBPARTITION TEMPLATE ( 
    SUBPARTITION "SPTN_PRFL_LN_NL_LOC_AR" VALUES ( ( 'PRFL_LN_NL', 'LOC_AR' ) ), 
    SUBPARTITION "SPTN_PRFL_LN_NL_LOAN_AR" VALUES ( ( 'PRFL_LN_NL', 'LOAN_AR' ) ), 

现在我想将子分区更新为

PARTITION BY RANGE ("D0_CRD_RPT_DT") INTERVAL (NUMTOYMINTERVAL(1, 'MONTH')) 
  SUBPARTITION BY LIST ("TA_SRC_STM_CD","TA_OBJ_TP_CD") 
  SUBPARTITION TEMPLATE ( 
    SUBPARTITION "SPTN_PRFL_LN_NL_LOC_AR" VALUES ( ( 'PRFL_LN_NL', '**AR_LOC_AR**' ) ), 
    SUBPARTITION "SPTN_PRFL_LN_NL_LOAN_AR" VALUES ( ( 'PRFL_LN_NL', '**AR_LOAN_AR**' ) ), 

这个表中有很多数据我该如何做?

尝试创建临时表,这是一个漫长的过程,有更简单的方法吗?

oracle partition subpartition
1个回答
0
投票

您应该能够通过简单的 ALTER TABLE 来完成此操作,也可以在线完成,例如

SQL> create table t
  2  ( D0_CRD_RPT_DT date,
  3    TA_SRC_STM_CD varchar2(100),
  4    TA_OBJ_TP_CD varchar2(100 )
  5  )
  6  PARTITION BY RANGE ("D0_CRD_RPT_DT") INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'))
  7    SUBPARTITION BY LIST ("TA_SRC_STM_CD","TA_OBJ_TP_CD")
  8    SUBPARTITION TEMPLATE (
  9      SUBPARTITION "SPTN_PRFL_LN_NL_LOC_AR" VALUES ( ( 'PRFL_LN_NL', 'LOC_AR' ) ),
 10      SUBPARTITION "SPTN_PRFL_LN_NL_LOAN_AR" VALUES ( ( 'PRFL_LN_NL', 'LOAN_AR' ) )
 11  )
 12  ( partition p1 values less than ( date '2025-01-01' )
 13  );

Table created.

SQL>
SQL> alter table t modify
  2  PARTITION BY RANGE ("D0_CRD_RPT_DT") INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'))
  3    SUBPARTITION BY LIST ("TA_SRC_STM_CD","TA_OBJ_TP_CD")
  4    SUBPARTITION TEMPLATE (
  5      SUBPARTITION "SPTN_PRFL_LN_NL_LOC_AR" VALUES ( ( 'PRFL_LN_NL', '**AR_LOC_AR**' ) ),
  6      SUBPARTITION "SPTN_PRFL_LN_NL_LOAN_AR" VALUES ( ( 'PRFL_LN_NL', '**AR_LOAN_AR**' ) )
  7  )
  8  ( partition p1 values less than ( date '2024-01-01' )
  9  ) online;

Table altered.
© www.soinside.com 2019 - 2024. All rights reserved.