17.10 - CASE DML式 - Parallel Transporter

Teradata® Parallel Transporter ユーザー ガイド

Product
Parallel Transporter
Release Number
17.10
Release Date
2021年6月
Content Type
ユーザー ガイド
Publication ID
B035-2445-061K-JPN
Language
日本語 (日本)

CASE DML式により、Teradata PTジョブは、各ソース行がいずれかのデータ宛先に適用される前にいくつかの条件の1つを満たすようにし、それらの条件によって、どのグループのDML文がターゲット テーブルに適用されるかが制御されるようになります。

次の例は、標準的なCASE DML式の構造です。

CASE  WHEN <condition 1> THEN <DML expression 1>
      WHEN <condition 2> THEN <DML expression 2>
       :        :         :           :
      WHEN <condition n> THEN <DML expression n>
                         ELSE <DML expression n+1>
END

CASE DML式内の条件は、左から右へ1つずつ評価されます。ある行に対して最初の条件が満たされると、Teradata PTにより、対応するDML式のDML文がその行に適用されます。 任意選択のELSEのDML式のDML文は、どの条件も満たされなかった場合に、デフォルトにより適用されます。

条件には、ソース行の列の値を参照する単純な述部を指定できます。また、任意により、論理ANDおよびORを使用して単純な述部を結合し、複雑な述部を構成して指定することもできます。 式の任意の値をCASE値式として指定できます。

以下に、CASE DML式を使用する標準的な例を示します。

CASE DML式の例

CASE WHEN ( Expected_Arrival_Time = Scheduled_Arrival_Time )
     THEN 'UPDATE Flight_Status_Board
               SET Flight_Status   = ''On Time'',
                   Gate_Number     = :Scheduled_Gate_Number,
                   Carousel_Number = :Scheduled_Carousel_Number;'
     WHEN ( Expected_Arrival_Time > Scheduled_Arrival_Time )
     THEN ('UPDATE Flight_Status_Board
                SET Flight_Status = ''Delayed'',
                    Arrival_Time  = :Expected_Arrival_Time;',
               'INSERT INTO LAX.AIRPORT_OPERATIONS(:Flight_Number,
                                                   ''Seat of the Pants Airlines'',
                                                   :Passenger_Count);')
     WHEN ( Expected_Arrival_Time = 0 )
     THEN ('UPDATE Flight_Status_Board
                SET Flight_Status  = ''Cancelled'',
                   Gate_Number     = NULL,
                   Carousel_Number = NULL;',
               'DELETE FROM  Pending_Arrivals
                       WHERE Flight_Number = :Flight_Number
                         AND Airline = ''Seat of the Pants'';')
     ELSE 'UPDATE Flight_Status_Board
               SET Flight_Status = ''Early'',
                   Arrival_Time  = :Expected_Arrival_Time;'
END