sql >> Base de Datos >  >> RDS >> Oracle

Oracle MERGE:solo se activa NOT MATCHED

Creo que has entendido mal para qué sirve la combinación.

Espero que su tabla sea algo como:

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

y luego la declaración de combinación podría ser:

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)

donde la combinación está en la clave principal de la tabla y se actualiza o se inserta dependiendo de si existe el registro para ese valor PK.

Esto tendría un máximo de un registro por día y t mantendría la cantidad de ejecuciones de esta instrucción por día (suponiendo que no haya otro DML en TABLE_FOR_TESTS).

Nota:sysdate por sí mismo incluye un componente de tiempo. trunc(sysdate) lo elimina y establece la hora en 00:00:00.