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.