JDBC Driver for Salesforce

Build 20.0.7655

UPSERT ステートメント

UPSERT ステートメントは、既存のレコードを更新するか、既存のレコードが識別されない場合は新しいレコードを作成します。

Upsert の設定

Upsert は、Salesforce で明示的に外部キーになるように定義されたフィールドでのみ実行できます。次のクエリで示すように、ExternalIdColumn というカラムにこのフィールドの名前を指定する必要があります。

  UPSERT INTO Lead (FirstName, LastName, Company, External_Id_Column__c, ExternalIdColumn) 
  VALUES ('Bob', 'Thorton', 'Universal Pictures', 12345, 'External_Id_Column__c')

ExternalIdColumn を表示させるには、Salesforce の接続プロパティを変更して、PseudoColumns フィールドを引用符なしの値'*=*' に設定します。

UPSERT ステートメントは、既存のレコードを更新するか、既存のレコードが識別されない場合は新しいレコードを作成します。

UPSERT 構文

UPSERT 構文は挿入の構文と同じです。Salesforce はVALUES 句で指定された入力を使用して、レコードがすでに存在するかどうかを判断します。レコードが存在しない場合は、レコードの挿入に必要なすべてのカラムが指定される必要があります。テーブル固有の情報については、データモデル を参照してください。

UPSERT INTO <table_name> 
( <column_reference> [ , ... ] )
VALUES 
( { <expression> | NULL } [ , ... ] ) 
  

<expression> ::=
  | @ <parameter> 
  | ?
  | <literal>
Statement およびPreparedStatement クラスのexecuteUpdate メソッドを使って、データ操作コマンドを実行し影響を受ける行を取得できます。 最後に挿入されたレコードのId を取得するには、getGeneratedKeys を使用します。さらに、次の例に示すように、prepareStatement を呼び出すときは、ステートメントクラスのRETURN_GENERATED_KEYS フラグを設定します。
String cmd = "UPSERT INTO Account (Name) VALUES (?)";
PreparedStatement pstmt = connection.prepareStatement(cmd,Statement.RETURN_GENERATED_KEYS);
pstmt.setString(1, "John");
int count = pstmt.executeUpdate();
System.out.println(count+" rows were affected");
ResultSet rs = pstmt.getGeneratedKeys();
while(rs.next()){	  
  System.out.println(rs.getString("Id"));
}
connection.close();	

Copyright (c) 2020 CData Software, Inc. - All rights reserved.
Build 20.0.7655