Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle MERGE:chỉ NOT MATCHED được kích hoạt

Tôi nghĩ rằng bạn đã hiểu sai về hợp nhất là gì.

Tôi mong đợi bảng của bạn giống như sau:

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

và sau đó câu lệnh hợp nhất có thể là:

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)

nơi nối nằm trên khóa chính của bảng và cập nhật hoặc chèn tùy thuộc vào việc bản ghi cho giá trị PK đó có tồn tại hay không.

Điều này sẽ có tối đa một bản ghi mỗi ngày và t sẽ giữ số lần thực thi câu lệnh này mỗi ngày (giả sử không có DML nào khác trên TABLE_FOR_TESTS).

Lưu ý:sysdate tự nó bao gồm một thành phần thời gian. trunc (sysdate) xóa nó và đặt thời gian thành 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. Làm cách nào tôi có thể thực hiện tổng hợp này?

  2. Tính Tổng thời lượng trong truy vấn sql

  3. Cách chèn dữ liệu trực tiếp từ Excel vào Cơ sở dữ liệu Oracle

  4. Tính toán dấu thời gian với thời gian tiết kiệm ánh sáng ban ngày

  5. Trình tạo ORACLE FORMS