17.05 - 例: ミュテーターSET句を指定したUPDATE - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

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

ミュテーターSET句構文では、省略表記の形式でSTRUCTURED型UDTのUPDATEリクエストを作成することができます。以下のSTRUCTUREDデータ型定義を考慮してください。

     CREATE TYPE person AS (
       last_name  VARCHAR(20),
       first_name VARCHAR(20),
       birthdate  DATE)
     …
     ;

     CREATE TYPE school_record AS (
       school_name VARCHAR(20),
       gpa         FLOAT)
     INSTANTIABLE
     …
     ;

     CREATE TYPE college_record AS (
       school  school_record,
       major   VARCHAR(20),
       minor   VARCHAR(20))
     INSTANTIABLE
     …
     ;

次のテーブル定義があると仮定します。

     CREATE TABLE student_record (
       student_id  INTEGER,
       student     person,
       high_school school_record,
       college     college_record);
ミュテーターSET句表記を使用しない場合、UPDATEは連結または入れ子のミュテーター メソッド呼出しの形式で作成しなければなりません。例:
  • 次のUPDATEリクエストでは、生徒のJohn DoeをNatsuki Tamuraに変更します。
         UPDATE student_record
          SET student = student.Last_name('Tamura').First_name('Natsuki')
         WHERE student.First_name() = 'John'
         AND   student.Last_name() = 'Doe';
  • 次のUPDATEリクエストでは、生徒Steven Smithの以下の在学記録を更新します。
    • school_name = 'UCLA'
    • GPA = 3.20
    • major = 'Computer Science'
           UPDATE student_record
            SET college =
            college.school(college.school().school_name('UCLA')
            .GPA(3.20)).major('Computer Science')
           WHERE student.First_name() = 'Steven'
           AND   student.Last_name() = 'Smith';

必要な連結または入れ子のミュテーター メソッド呼出しを正しく記述することは、非常に複雑になる可能性があります。しかし、ミュテーターSET句の表記を使用すると、STRUCTURED型の列のUPDATEリクエストの作成を、より簡単かつ直観的なものにすることができます。

前の2つのUPDATEリクエストを、以下のように書き換えることを考慮してください(今回はミュテーターSET句の表記を使用)。
  • 次のUPDATEリクエストでは、生徒のJohn DoeをNatsuki Tamuraに変更します。
         UPDATE student_record
           SET student.Last_name = 'Tamura',
               student.First_name = 'Natsuki',
         WHERE student.First_name() = 'John'
         AND   student.Last_name() = 'Doe';
  • 次のUPDATEリクエストでは、生徒Steven Smithの以下の在学記録を更新します。
    • school_name = 'UCLA'
    • GPA = 3.20
    • major = 'Computer Science'
           UPDATE student_record
            SET college.school.school_name = 'UCLA',
                college.school.GPA = 3.20,
                college.major = 'Computer Science'
           WHERE student.First_name() = 'Steven'
           AND   student.Last_name() = 'Smith';