Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle MERGE:nur NOT MATCHED wird ausgelöst

Ich glaube, Sie haben missverstanden, wozu Merge dient.

Ich würde erwarten, dass Ihre Tabelle ungefähr so ​​​​aussieht:

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

und dann könnte die Merge-Anweisung lauten:

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)

wobei sich der Join auf dem Primärschlüssel der Tabelle befindet und entweder aktualisiert oder eingefügt wird, je nachdem, ob der Datensatz für diesen PK-Wert vorhanden ist.

Dies hätte maximal einen Datensatz pro Tag und t würde die Anzahl der Ausführungen dieser Anweisung pro Tag enthalten (vorausgesetzt, es gibt keine andere DML auf TABLE_FOR_TESTS).

Hinweis:sysdate selbst enthält eine Zeitkomponente. trunc(sysdate) entfernt es und setzt die Zeit auf 00:00:00.