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