17.10 - ALTER TABLE ADD column_nameの例 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-171K-JPN
Language
日本語 (日本)

例: NUMBER列の追加または変更

次のテーブルを作成するとします。

     CREATE TABLE num_tab (
       n1 NUMBER(*,3),
       n2 NUMBER,
       n3 NUMBER(*),
       n4 NUMBER(5,1));

この例では、num_tabの既存のNUMBER列の精度を変更します。

     ALTER TABLE num_tab ADD n4 NUMBER(9,1);

この例では、num_tabの元の定義の既存のNUMBER列の精度と位取りの両方を変更します。この例は、num_tabの改訂された定義に対して実行された場合は無効です。これは、前の(n4列の精度を変更した)例をVantageが処理した後であると考えられるためです。

     ALTER TABLE num_tab ADD n4 NUMBER(10,6);

この例では、NUMBER列をnum_tabに追加します。

     ALTER TABLE num_tab ADD n6 NUMBER(12,4);

例: 列の名前変更と、その後の変更前の列名を使用した新しい列の追加

既存の列の名前を変更してから、その列の変更前の名前を使用して異なるデータ型の新しい列を作成することができます。例えば、以下の テーブル定義があるとします。

     CREATE SET TABLE t1, NO FALLBACK, NO BEFORE JOURNAL, 
                          NO AFTER JOURNAL,
       upi INTEGER NOT NULL,
       f1  FLOAT,
       d1  DECIMAL(7,2),
       i1  INTEGER)
     UNIQUE PRIMARY INDEX(upi);

f1列をf2という名前に変更してから、FLOATデータ型(今回f2という名前に変更された列に関連付けられていたデータ型)ではなくINTEGERデータ型を持つf1という名前の新しい列を追加します。

     ALTER TABLE t1 
       RENAME f1 AS f2,
       ADD    f1 INTEGER;
     *** Table has been modified. 
     *** Total elapsed time was 1 second.

i1列をi2という名前に変更してから、INTEGERデータ型(今回i2という名前に変更された列に関連付けられていたデータ型)ではなくDECIMALデータ型を持つi1という名前の新しい列を追加します。

     ALTER TABLE t1 
      RENAME i1 AS i2,
      ADD    i1 DECIMAL(8,3);
     *** Table has been modified. 
     *** Total elapsed time was 1 second.

SHOW TABLE文を使用して新しいテーブルの定義を表示します。 SHOW objectを参照してください。

     SHOW TABLE t1;
      *** Text of DDL statement returned. 
       *** Total elapsed time was 1 second.
     CREATE SET TABLE  user_name.t1, NO FALLBACK,NO BEFORE JOURNAL,
                              NO AFTER JOURNAL,CHECKSUM = DEFAULT (
       upi INTEGER NOT NULL,
       f2  FLOAT,
       d1  DECIMAL(7,2),
       i2  INTEGER,
       f1  INTEGER,
       i1  DECIMAL(8,3)
     UNIQUE PRIMARY INDEX (upi);

例: テーブルへのLOB列の追加

次の例は、partshistoryという名前のテーブルにCLOB列extended_descriptionを追加します。

    ALTER TABLE partshistory
    ADD extended_description CLOB;

例: JSON LOB以外およびLOB列のあるテーブルの変更

LOB以外およびLOB JSON列のあるテーブルのテーブル定義は以下のとおりです。

CREATE TABLE jsonTable (id INTEGER,
               jsn1 JSON(1000) CHARACTER SET LATIN,
               jsn2 JSON(1M) INLINE LENGTH 30000 CHARACTER SET LATIN);

この文では、LOB以外の列の最大長を増やします。

ALTER TABLE jsonTable ADD jsn1 JSON(2000);

この文では、LOB列の最大長を増やします。

ALTER TABLE jsonTable 
      ADD jsn2 JSON(2M) INLINE LENGTH 30000 CHARACTER SET LATIN;

例: 列パーティションへの列の追加

この例では、o_commentの単一列パーティションに2つの列を追加し、システム定義のCOLUMN形式と自動圧縮を使用して、パーティションを複数列パーティションに変更します。

以下の同等のリクエストはいずれも、ordersテーブルを変更するために同じアクションを実行します。

     ALTER TABLE orders 
     ADD (o_comment_ext1 VARCHAR(79), o_comment_ext2 VARCHAR(79))
     INTO o_comment;
     ALTER TABLE orders 
     ADD o_comment_ext1 VARCHAR(79) INTO o_comment,
     ADD o_comment_ext2 VARCHAR(79) INTO o_comment;
     ALTER TABLE orders 
     ADD (o_comment_ext1 VARCHAR(79)) INTO o_comment,
     ADD (o_comment_ext2 VARCHAR(79)) INTO o_comment;
     ALTER TABLE orders 
     ADD (o_comment_ext1 VARCHAR(79)) INTO o_comment,
     ADD o_comment_ext2 VARCHAR(79) INTO o_comment;
     ALTER TABLE orders 
     ADD o_comment_ext1 VARCHAR(79) INTO o_comment,
     ADD (o_comment_ext2 VARCHAR(79)) INTO o_comment;

これらはすべて、テーブルの各行でNULLに設定された新しい列がある次の テーブル定義を生成します。

     CREATE TABLE orders (
       o_orderkey       INTEGER NOT NULL,
       o_custkey        INTEGER,
       o_orderstatus    CHARACTER(1) CASESPECIFIC,
       o_totalprice     DECIMAL(13,2) NOT NULL,
       o_ordertsz       TIMESTAMP(6) WITH TIME ZONE NOT NULL,
       o_comment        VARCHAR(79),
       o_salesperson    VARCHAR(5),
       o_ordersubstatus CHARACTER(1) CASESPECIFIC,
       o_comment_ext1   VARCHAR(79),
       o_comment_ext2   VARCHAR(79) )
     PARTITION BY (COLUMN 
                   ALL BUT ((o_orderstatus, o_ordersubstatus),
                           (o_comment, o_comment_ext1, o_comment_ext2))
                           ADD 4,
                   RANGE_N(o_ordertsz 
                   BETWEEN TIMESTAMP '2003-01-01 00:00:00.000000+00:00'
                   AND     TIMESTAMP '2009-12-31 23:59:59.999999+00:00' 
                   EACH INTERVAL '1' MONTH) ),
     UNIQUE INDEX(o_orderkey);

例: 基本AMPインデックスを持つテーブルへの列パーティションの追加

デフォルトとして自動圧縮が適用される次のテーブル定義があるとします。

CREATE TABLE Orders
    ( o_orderkey INTEGER NOT NULL,
      o_custkey INTEGER,
      o_orderstatus CHAR(1) CASESPECIFIC,
      o_totalprice DECIMAL(13,2) NOT NULL,
      o_ordertsz TIMESTAMP(6) WITH TIME ZONE NOT NULL,
      o_comment VARCHAR(79) )
  PRIMARY AMP INDEX (o_orderkey), PARTITION BY COLUMN,
  UNIQUE INDEX (o_orderkey);

次のALTER TABLE文では、システム決定のCOLUMN形式と自動圧縮を使用して単一列パーティションを追加します。

ALTER TABLE Orders ADD o_salesperson VARCHAR(5);

これにより、テーブル定義が次のように生成されます。

CREATE TABLE Orders
    ( o_orderkey INTEGER NOT NULL,
      o_custkey INTEGER,
      o_orderstatus CHAR(1) CASESPECIFIC,
      o_totalprice DECIMAL(13,2) NOT NULL,
      o_ordertsz TIMESTAMP(6) WITH TIME ZONE NOT NULL,
      o_comment VARCHAR(79),
      o_salesperson VARCHAR(5) )
  PRIMARY AMP INDEX (o_orderkey) PARTITION BY COLUMN AUTO COMPRESS,
  UNIQUE INDEX (o_orderkey);

例: 基本AMPインデックスを持つテーブルへの別の列パーティションの追加

次のALTER TABLE文では、デフォルトとしてはシステム決定のCOLUMN形式を使用し自動圧縮を使用しないで、別の単一列パーティションを追加します。

ALTER TABLE Orders ADD o_ordersubstatus CHAR(1) CASESPECIFIC;

これにより、テーブル定義が次のように生成されます。

CREATE TABLE Orders
    ( o_orderkey INTEGER NOT NULL,
      o_custkey INTEGER,
      o_orderstatus CHAR(1) CASESPECIFIC,
      o_totalprice DECIMAL(13,2) NOT NULL,
      o_ordertsz TIMESTAMP(6) WITH TIME ZONE NOT NULL,
      o_comment VARCHAR(79),
      o_salesperson VARCHAR(5),
      o_ordersubstatus CHAR(1) CASESPECIFIC )
  PRIMARY AMP INDEX (o_orderkey)
  PARTITION BY
    COLUMN AUTO COMPRESS ALL BUT (o_ordersubstatus NO AUTO COMPRESS),
  UNIQUE INDEX (o_orderkey);

例: 基本AMPインデックスを持つテーブルへの2列パーティションの追加

次のALTER TABLE文では、デフォルトとしてはシステム決定のCOLUMN形式を使用し自動圧縮を使用しないで、2列パーティションを追加します。

ALTER TABLE Orders ADD (o_comment_ext1 VARCHAR(79), o_comment_ext2 VARCHAR(79));

これにより、テーブル定義が次のように生成されます。

CREATE TABLE Orders
    ( o_orderkey INTEGER NOT NULL,
      o_custkey INTEGER,
      o_orderstatus CHAR(1) CASESPECIFIC,
      o_totalprice DECIMAL(13,2) NOT NULL,
      o_ordertsz TIMESTAMP(6) WITH TIME ZONE NOT NULL,
      o_comment VARCHAR(79),
      o_salesperson VARCHAR(5),
      o_ordersubstatus CHAR(1) CASESPECIFIC,
      o_comment_ext1 VARCHAR(79),
      o_comment_ext2 VARCHAR(79) )
  PRIMARY AMP INDEX (o_orderkey)
  PARTITION BY
    COLUMN AUTO COMPRESS ALL BUT (
                          o_ordersubstatus NO AUTO COMPRESS,
                          (o_comment_ext1, o_comment_ext2) NO AUTO COMPRESS ),
  UNIQUE INDEX(o_orderkey);