ホームページ >データベース >mysql チュートリアル >MERGE を使用して Oracle で Upsert 操作を実行する方法
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_id
を my_table
内の既存の ID と比較します。
WHEN MATCHED
: 一致するものが見つかった場合、value
列は p_value
に更新されます。WHEN NOT MATCHED
: 一致するものが見つからない場合は、指定された p_id
と p_value
を使用して新しい行が挿入されます。最後の SELECT
ステートメントは、更新と挿入の結果を組み合わせたものを示します。 このアプローチは効率的であり、条件チェックを伴う個別の UPDATE
ステートメントと INSERT
ステートメントの必要性を回避します。
以上がMERGE を使用して Oracle で Upsert 操作を実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。