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