列のデータ型を変更する手順 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
ft:locale
ja-JP
ft:lastEdition
2021-03-30
dita:mapPath
ja-JP/jpx1556733107962.ditamap
dita:ditavalPath
ja-JP/jpx1556733107962.ditaval
dita:id
B035-1184
Product Category
Software
Teradata Vantage

既存の列データに影響を与える列データ型の変更を加えるには、次の手順を使用します。

  1. 変更するデータ型属性を含むテーブルとは異なる名前で、新しいテーブルを作成します。
  2. INSERT … SELECTリクエストを使用して、新しいテーブルにデータを挿入します。
  3. ステップ4の前に、古いテーブルの権限をカタログします。次の構文ルールを使用します。
        SELECT username, accessright, grantauthority, columnname,
               allnessflag
        FROM dbc.allrightsV
        WHERE tablename = 'table_name'
        AND   databasename = 'database_name';
  4. 古いテーブルを削除します。
  5. 新しいテーブルの名前を古いテーブルの名前に変更します。

    例えば、name列のデータ型属性を12文字から14文字に拡張するためには、次の一連のリクエストを使用します。

        CREATE TABLE temp, FALLBACK  (
          EmpNo INTEGER NOT NULL FORMAT ZZZZ9,
          Name  CHARACTER(14) NOT NULL,
            …
          HCap  BYTEINT FORMAT 'Z9')
        UNIQUE PRIMARY INDEX (index_name) ;
  6. テーブルを作成後、それに値を挿入し、古いemployeeテーブルを削除し、一時的なテーブル名に変更します。

    次の例は、これがどのように行なわれるかを示しています。

        INSERT INTO temp
          SELECT *
          FROM employee;
        DROP TABLE employee;
        RENAME TABLE temp TO employee;

    employeeがすでに存在しているので、employeeテーブルの再作成には別の名前(temp)が使用されています。既存のテーブルに対してCREATE TABLEリクエストを実行した場合には、エラーとなります。

    ステップ1に従ってテーブルの再作成を簡単に行なうために、SHOW TABLEリクエストを実行して、そのテーブルに対するCREATE TABLE DDLテキストを表示させることができます。

    例えば、次のリクエストは、テーブルdept_emに対するCREATE TABLE DDLテキストの再構築を表示します。

        SHOW TABLE dept_em;

    BTEQを使用する場合には、BTEQの編集コマンドを使用してSQLテキストを変更(つまり、テーブルの名前とインデックスを変更)し、BTEQ SUBMITコマンドを使用して新しいテーブルの定義を実行することができます。

  7. テーブルが削除されると、権限が失われるので、同じアクセス権をemployeeテーブルに再び与えます。ステップ3でカタログしたものと同じ権限を使用します。

VARCHARまたはVARBYTEの値を増やしても、現在の形式は変わりません。代わりに、リクエストに新しいFORMAT句を含めることを考慮する必要があります。

ALTER TABLEは、ANSI SQLでは提供されない多数の拡張機能を提供します。たとえば、ANSI SQLでの列属性の変更は、デフォルトの句の設定または削除に限定されていますが、Teradata DatabaseのSQLではそうではありません。