Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle MERGE:hanya NOT MATCHED yang dipicu

Saya pikir Anda telah salah paham untuk apa penggabungan itu.

Saya berharap meja Anda seperti:

CREATE TABLE TABLE_FOR_TESTS (
    d DATE,
    t NUMBER(8),
    CONSTRAINT TABLE_FOR_TESTS_PK PRIMARY KEY (d)
)

dan kemudian pernyataan gabungan bisa menjadi:

MERGE INTO TABLE_FOR_TESTS t
  USING (SELECT trunc(sysdate) d FROM DUAL) s
    ON (s.d = t.d)
  WHEN MATCHED THEN
    UPDATE SET t = t+1
  WHEN NOT MATCHED THEN         
    INSERT (d, t) VALUES (trunc(sysdate), 1)

di mana gabungan berada pada kunci utama tabel dan memperbarui atau menyisipkan tergantung pada apakah catatan untuk nilai PK itu ada.

Ini akan memiliki maksimum satu catatan per hari dan t akan menampung jumlah eksekusi pernyataan ini per hari (dengan asumsi tidak ada DML lain di TABLE_FOR_TETS).

Catatan:sysdate dengan sendirinya menyertakan komponen waktu. trunc(sysdate) menghapusnya dan menyetel waktu ke 00:00:00.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Haruskah saya mengindeks kolom kunci utama di Oracle?

  2. Meminta Oracle TIMESTAMP DENGAN TIMEZONE

  3. Bagaimana cara meneruskan varchar dengan tanda kutip tunggal ke Stored Proc di Oracle

  4. Bagaimana cara menulis subquery rekursif yang terlibat dalam sqlplus dengan beberapa tabel untuk melacak node?

  5. ORA-00947 Nilai tidak cukup saat mendeklarasikan tipe secara global