例: 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);