UPDATE SELECT ステートメント
Yahoo! Ads への1回の要求で複数の更新処理を実行するには、まずINSERT INTO 構文を使用して、データの一時テーブルをYahoo! Ads に挿入します。このとき、Yahoo! Ads に送信されるデータは、まず一時テーブルに入力されます。更新するデータがすべて一時テーブルに入力されたら、UPDATE SELECT FROM を使用して、一時テーブルのデータをYahoo! Ads のテーブルに渡します。
この機能は、JDBC で利用可能な標準バッチ処理 API 経由でも利用できます。
一時テーブルへの入力
入力先の一時テーブルは動的なテーブルで、実行時に最初のデータをテーブルに入力するときに作成されます。一時テーブルは、その名前に「#」を付加して示されます。一時テーブルを使用してデータを更新する場合、その一時テーブルには「[TableName]#TEMP」という形式で名前を付ける必要があります。「TableName」は、データを挿入するテーブルの名前です。
次に例を示します。
INSERT INTO [YahooAds].[SearchAds].SearchAdsAdGroups#TEMP (Id, Name, MyCustomField__c) VALUES ('AX1000001', 'New SearchAdsAdGroups', '9000'); INSERT INTO [YahooAds].[SearchAds].SearchAdsAdGroups#TEMP (Id, Name, MyCustomField__c) VALUES ('AX1000002', 'New SearchAdsAdGroups 2', '9001'); INSERT INTO [YahooAds].[SearchAds].SearchAdsAdGroups#TEMP (Id, Name, MyCustomField__c) VALUES ('AX1000003', 'New SearchAdsAdGroups 3', '9002');
このコードでは、3つのデータカラムと3つのデータ行を含む「[YahooAds].[SearchAds].SearchAdsAdGroups#TEMP」という名前の一時テーブルが作成されます。一時テーブルでは型を指定できないため、すべての値が文字列としてメモリに保存されます。値は、[YahooAds].[SearchAds].SearchAdsAdGroups テーブルに送信された後で正しい型に変換されます。
実際のテーブルの更新
一時テーブルにデータが入力されたら、Yahoo! Ads の実際のテーブルに対して更新を実行します。そのためには、実際のテーブルへの更新(UPDATE)を実行し、一時テーブルから入力データを選択します。次に例を示します。
UPDATE [YahooAds].[SearchAds].SearchAdsAdGroups (Id, AuthType, MyCustomField__c) SELECT Id, AuthType, MyCustomField__c FROM [YahooAds].[SearchAds].SearchAdsAdGroups#TEMPこの例では、[YahooAds].[SearchAds].SearchAdsAdGroups#TEMP テーブルのすべての内容が[YahooAds].[SearchAds].SearchAdsAdGroups テーブルに渡されます。この結果、各要求で複数の更新を送信できるため、Yahoo! Ads に送信される要求の数が少なくて済み、多くのレコードを更新する場合のパフォーマンスが向上します。
結果
クエリの結果は、一時テーブルLastResultInfo#TEMP に保存されます。次に一時テーブルが渡されてデータが変更されると、このテーブルはクリアされて、データが再挿入されます。LastResultInfo#TEMP テーブルはスキーマが事前定義されていないことに注意してください。データを読み取る前に、実行時にそのメタデータを確認する必要があります。
一時テーブルの存続時間
一時テーブルは、接続が開いている間だけ存続します。Yahoo! Ads への接続が閉じられると、LastResultInfo#TEMP テーブルを含むすべての一時テーブルがクリアされます。