すべてのプロダクト
Search
ドキュメントセンター

:UPSERT

最終更新日:Mar 24, 2025

このトピックでは、時空間テーブルのデータを更新するために使用される構文について説明します。

構文

upsert_statement ::=  UPSERT [hint_clause] INTO table_name
                      '('columns| _l_ts_')' 
                      VALUES '(' values ')'
                      [ ON DUPLICATE KEY update_column = update_value |IGNORE ]?
columns ::=  column_name, columns
values  ::=  term, values,'(' values ')'
             | function_name '(' term ( ',' term )* ')'
update_column ::= column_name
update_value ::= term

hint_clause::=/*+hint_items*/
hint_items::=hint_item(','hint_item)*
hint_item::=identifier('('hint_option(','hint_option)*')')
hint_option::=expression
説明
  • UPSERT ステートメントは、複数の行をバッチで挿入できます。値が挿入される列を指定する必要があります。 Values キーワードを使用して、挿入する行数を決定できます。

  • UPSERT ON DUPLICATE KEY 操作がサポートされています。この操作は、CHECK AND PUT 操作に似ています。指定された値で行を識別できることを確認してください。 ON DUPLICATE KEY の後に更新する列と新しい値を指定し、その列がテーブルに存在する場合、例外が発生します。これは、ON DUPLICATE KEY が指定された列が存在するかどうかをチェックして値を更新できないためです。 ON DUPLICATE KEY IGNORE は、重複する列のチェックをスキップして行を直接挿入するために使用されます。

  • 標準の Java Database Connectivity(JDBC)を使用して、通常の SQL ステートメントまたはプリペアドステートメントを Lindorm に送信できます。 Lindorm 2.2.16 以降のバージョンでは、標準の JDBC を使用してプリペアドステートメントを送信することで、標準のバッチ挿入操作のみを実行できます。

  • 次の 2 つの方法のいずれかを使用して、時空間テーブルにデータを書き込むことができます。

    • 方法 1

      UPSERT INTO dt(id, g, t) VALUES(0,ST_MakePoint(0.0,1.0),1000);
    • 方法 2

      UPSERT INTO dt(id, g, t) VALUES(0,ST_GeomFromText('POINT (0.0 1.0)'),1000);
  • 次のステートメントを実行して、一度に複数のデータを時空間テーブルに書き込むことができます。

    UPSERT INTO dt (id, g, t) VALUES(1,ST_MakePoint(1.23,2.34),2000),(2,ST_MakePoint(3.45,5.67),3000),(3,ST_MakePoint(4.56,5.67),4000);
説明
  • データの書き込みに使用できる時空間関数の詳細については、「時空間関数」をご参照ください。

  • JDBC を使用してデータを書き込む方法の例については、「はじめに」をご参照ください。