Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melakukan Operasi Upsert dalam Oracle Menggunakan MERGE?

Bagaimana untuk Melakukan Operasi Upsert dalam Oracle Menggunakan MERGE?

Linda Hamilton
Linda Hamiltonasal
2025-01-20 21:41:12904semak imbas

How to Perform an Upsert Operation in Oracle Using MERGE?

Oracle Upsert: Mengemas kini atau Memasukkan Data dengan Cekap

Masalah:

Bagaimana anda boleh melakukan operasi upsert dalam Oracle—mengemas kini rekod jika wujud atau memasukkan yang baharu jika tiada?

Penyelesaian: MERGE Kenyataan

Oracle tidak mempunyai perintah UPSERT khusus. Pernyataan MERGE menyediakan fungsi ini. Ia menggabungkan operasi kemas kini dan sisipan dengan cekap berdasarkan syarat gabungan.

Contoh Ilustrasi

Contoh ini mempamerkan upsert menggunakan pernyataan MERGE dalam prosedur tersimpan:

<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>

Prosedur ini, upsert_data, mengambil ID dan nilai. Penyataan MERGE membandingkan p_id yang disediakan dengan ID sedia ada dalam my_table.

  • WHEN MATCHED: Jika padanan ditemui, lajur value dikemas kini kepada p_value.
  • WHEN NOT MATCHED: Jika tiada padanan ditemui, baris baharu dimasukkan dengan p_id dan p_value yang diberikan.

Pernyataan akhir SELECT menunjukkan hasil kemas kini gabungan dan sisipan. Pendekatan ini cekap dan mengelakkan keperluan untuk pernyataan UPDATE dan INSERT berasingan dengan semakan bersyarat.

Atas ialah kandungan terperinci Bagaimana untuk Melakukan Operasi Upsert dalam Oracle Menggunakan MERGE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn