すべてのプロダクト
Search
ドキュメントセンター

PolarDB:ALTER TABLE...ADD SUBPARTITION

最終更新日:May 27, 2024

ALTER TABLE...ADD SUBPARTITIONコマンドは、サブパーティションを既存のサブパーティションに追加します。

概要

ALTER TABLE...ADD SUBPARTITIONコマンドを使用して、既存のサブパーティションテーブルにサブパーティションを追加できます。 構文:
ALTER TABLE table_name MODIFY PARTITION partition_name 
      SUBPARTITION subpartition_definition; 
subpartition_definitionは
{list subpartition | range subpartition}
です。
list_subpartitionは次のとおりです。
SUBPARTITION [subpartition_name]
  VALUES (value[, value]...)
  [TABLESPACE tablespace_name] 
range_subpartitionは次のとおりです。
SUBPARTITION subpartition_name
  VALUES LESS THAN (value[, value]...) 
  [TABLESPACE tablespace_name] 

説明

ALTER TABLE...ADD SUBPARTITIONコマンドは、サブパーティションを既存のサブパーティションに追加します。 定義されるサブパーティションの数は制限されない。

新しいサブパーティションは、既存のサブパーティションと同じタイプ (LISTまたはRANGE) である必要があります。 新しいサブパーティションのサブパーティショニングルールは、既存のサブパーティションを定義するサブパーティショニングルールで指定された同じ列を参照する必要があります。

ALTER TABLE...ADD SUBPARTITIONステートメントを使用して、MAXVALUEまたはDEFAULTルールを持つテーブルにサブパーティションを追加することはできません。 または、ALTER TABLEを使用することもできます... 既存のサブパーティションを分割するSPLIT SUBPARTITIONステートメント。 これにより、サブパーティションをテーブルに追加することができます。

レンジパーティションテーブルの既存のサブパーティションの前に新しいサブパーティションを追加することはできません。 範囲サブパーティションは昇順で指定する必要があります。

新しいサブパーティションが存在するテーブルスペースを指定するには、TABLESPACE句を含めます。 テーブルスペースを指定しない場合、サブパーティションはデフォルトのテーブルスペースに作成されます。

テーブルにインデックスが付けられている場合は、新しいサブパーティションにインデックスが作成されます。

ALTER TABLE...ADD SUBPARTITIONコマンドを使用するには、テーブルの所有者であるか、スーパーユーザー (または管理者) 権限を持っている必要があります。

パラメーター

パラメーター説明
table_nameサブパーティションが存在するパーティションテーブルの名前 (オプションでスキーマ修飾) 。
partition_name新しいサブパーティションが存在するパーティションの名前。
subpartition_name作成するサブパーティションの名前。 サブパーティション名は、すべてのパーティションおよびサブパーティション間で一意である必要があり、オブジェクト識別子の命名規則に従う必要があります。
(value[, value]...)

valueを使用して、テーブルエントリをパーティションにグループ化する引用符で囲まれたリテラル値 (またはコンマで区切られたリテラル値のリスト) を指定します。 各パーティショニングルールは少なくとも1つの値を指定する必要がありますが、ルールで指定される値の数に制限はありません。 valueは、nulldefault (LISTパーティションを指定する場合) 、またはmaxvalue (RANGEパーティションを指定する場合) です。

DEFAULTパーティションまたはMAXVALUEパーティションの作成の詳細については、「リストパーティションまたは範囲パーティションテーブルの浮遊値の処理」をご参照ください。

tablespace_nameサブパーティションが存在するテーブルスペースの名前。

例-LIST-RANGEパーティション分割テーブルにサブパーティションを追加する

次の例では、RANGEサブパーティションをlist-partitioned salesテーブルに追加します。 salesテーブルは、次のコマンド
を使用して作成されます。(
  dept_no number,   
  part_no varchar2,
  country varchar2(20),
  date date,
  金額番号
)
リストによるパーティー (国)
  範囲によるサブパーティー (日付)
(
  PARTITION europe VALUES('FRANCE', 'ITALY')
    (
      SUBPARTITION europe_2011 
        VALUES LESS THAN('2012-Jan-01'),
      SUBPARTITION europe_2012 
        VALUES LESS THAN('2013-Jan-01')
    ),
  PARTITION asia VALUES('INDIA', 'PAKISTAN')
    (
      SUBPARTITION asia_2011 
        VALUES LESS THAN('2012-Jan-01'),
      SUBPARTITION asia_2012 
        VALUES LESS THAN('2013-Jan-01')
    ),
  PARTITION americas VALUES('US', 'CANADA')
    (
      SUBPARTITION americas_2011 
        VALUES LESS THAN('2012-Jan-01'),
      SUBPARTITION americas_2012 
        VALUES LESS THAN('2013-Jan-01')
    )
);
販売テーブルには3つのパーティション (ヨーロッパ、アジア、アメリカ) があります。 各パーティションには2つの範囲定義サブパーティションがあります
。acctg=# SELECT partition_name, subpartition_name, high_value FROM ALL_TAB_SUBPARTITIONS;
 partition_name | subpartition_name | high_value
---------------- ------------------- + ---------------
 ヨーロッパ | europe_2011 | '2012-Jan-01' 
 ヨーロッパ | europe_2012 | '2013-Jan-01' 
 asia | asia_2011 | '2012-Jan-01' 
 asia | asia_2012 | '2013-Jan-01' 
 アメリカ | americas_2011 | '2012-Jan-01' 
 アメリカ | americas_2012 | '2013-Jan-01'
(6行) 
次のコマンドは、europe_2013という名前のサブパーティションを追加します。
ALTER TABLE sales MODIFY PARTITION europe 
  ADD SUBPARTITION europe_2013 
  より少ない価値 ('2015-Jan-01 '); 
このコマンドが呼び出された後、テーブルにはeurope_2013サブパーティションが含まれます:
acctg=# SELECT partition_name, subpartition_name, high_value FROM ALL_TAB_SUBPARTITIONS;
 partition_name | subpartition_name | high_value
---------------- ------------------- + ---------------
 ヨーロッパ | europe_2011 | '2012-Jan-01' 
 ヨーロッパ | europe_2012 | '2013-Jan-01' 
 ヨーロッパ | europe_2013 | '2015-Jan-01' 
 asia | asia_2011 | '2012-Jan-01' 
 asia | asia_2012 | '2013-Jan-01' 
 アメリカ | americas_2011 | '2012-Jan-01' 
 アメリカ | americas_2012 | '2013-Jan-01'
(7行) 

新しい範囲サブパーティションを追加する場合、サブパーティショニングルールでは、既存のサブパーティションの後にある範囲を指定する必要があります。

例-RANGE-LISTパーティション分割テーブルにサブパーティションを追加する

次の例では、range-partitioned salesテーブルにLISTサブパーティションを追加します。 salesテーブルは、次のコマンド
を使用して作成されます。(
  dept_no number,
  part_no varchar2,
  country varchar2(20),
  date date,
  金額番号
)
範囲によるパーティー (日付)
  SUBPARTITION BY LIST (country)
  (
    PARTITION first_half_2012 VALUES LESS THAN('01-JUL-2012')
    (
      SUBPARTITION europe VALUES ('ITALY', 'FRANCE'),
      SUBPARTITION americas VALUES ('US', 'CANADA')
    ),

    PARTITION second_half_2012 VALUES LESS THAN('01-JAN-2013') 
    (
      SUBPARTITION asia VALUES ('INDIA', 'PAKISTAN')
    )
  );
salesテーブルには、それぞれfirst_half_2012とsecond_half_2012という名前の2つのパーティションがあります。 first_half_2012 パーティションには、それぞれ europe および americas という 2 つのサブパーティションがあります。 second_half_2012 パーティションには、asia という名前のサブパーティションが 1 つあります。
acctg=# SELECT partition_name, subpartition_name, high_value FROM ALL_TAB_SUBPARTITIONS;
  partition_name | subpartition_name | high_value
------------------ + ------------------- + ---------------------
 first_half_2012 | ヨーロッパ | 「イタリア」、「フランス」  
 first_half_2012 | アメリカ | 「米国」、「カナダ」 
 second_half_2012 | asia | 'INDIA' 、'PAKISTAN'
(3行) 
次のコマンドは、east_asiaという名前のサブパーティションをsecond_half_2012パーティションに追加します。
 
  SUBPARTITION east_asia VALUES ('CHINA') を追加します。
このコマンドが呼び出された後、テーブルにはeast_asiaサブパーティションが含まれます:
acctg=# SELECT partition_name, subpartition_name, high_value FROM ALL_TAB_SUBPARTITIONS;
  partition_name | subpartition_name | high_value
------------------ + ------------------- + ---------------------
 first_half_2012 | ヨーロッパ | 「イタリア」、「フランス」   
 first_half_2012 | アメリカ | 「米国」、「カナダ」     
 second_half_2012 | asia | 'INDIA' 、'PAKISTAN' 
 second_half_2012 | east_asia | 「中国」
(4行)