ホームページ >データベース >mysql チュートリアル >MERGE を使用して Oracle で Upsert 操作を実行する方法

MERGE を使用して Oracle で Upsert 操作を実行する方法

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-20 21:41:12925ブラウズ

How to Perform an Upsert Operation in Oracle Using MERGE?

Oracle Upsert: データの効率的な更新または挿入

問題:

Oracle で更新/挿入操作 (存在する場合はレコードを更新し、存在しない場合は新しいレコードを挿入) を実行するにはどうすればよいですか?

解決策: MERGE ステートメント

Oracle には専用の UPSERT コマンドがありません。 MERGE ステートメントはこの機能を提供します。 結合条件に基づいて更新操作と挿入操作を効率的に組み合わせます。

具体例

この例では、ストアド プロシージャ内で MERGE ステートメントを使用した更新/挿入を示します。

<code class="language-sql">CREATE OR REPLACE PROCEDURE upsert_data (p_id NUMBER, p_value NUMBER)
AS
BEGIN
  MERGE INTO my_table target
  USING dual source
  ON (target.id = p_id)
  WHEN MATCHED THEN
    UPDATE SET target.value = p_value
  WHEN NOT MATCHED THEN
    INSERT (id, value) VALUES (p_id, p_value);
END;
/

-- Sample usage and verification
CREATE TABLE my_table (id NUMBER PRIMARY KEY, value NUMBER);

BEGIN
  upsert_data(1, 10);
  upsert_data(1, 20);  -- Update existing row
  upsert_data(2, 30);  -- Insert new row
END;
/

SELECT * FROM my_table;</code>

このプロシージャ upsert_data は ID と値を受け取ります。 MERGE ステートメントは、指定された p_idmy_table 内の既存の ID と比較します。

  • WHEN MATCHED: 一致するものが見つかった場合、value 列は p_value に更新されます。
  • WHEN NOT MATCHED: 一致するものが見つからない場合は、指定された p_idp_value を使用して新しい行が挿入されます。

最後の SELECT ステートメントは、更新と挿入の結果を組み合わせたものを示します。 このアプローチは効率的であり、条件チェックを伴う個別の UPDATE ステートメントと INSERT ステートメントの必要性を回避します。

以上がMERGE を使用して Oracle で Upsert 操作を実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。