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 中執行更新插入操作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!