ミュテーター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';