sql >> Database teknologi >  >> RDS >> Oracle

Oracle MERGE:kun NOT MATCHED udløses

Jeg tror, ​​du har misforstået, hvad fusion er for noget.

Jeg forventer, at dit bord er noget som:

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

og så kunne flettesætningen være:

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)

hvor joinforbindelsen er på den primære nøgle i tabellen og enten opdatere eller indsætte afhængigt af, om posten for den pågældende PK-værdi findes.

Dette ville have maksimalt én post pr. dag, og t ville indeholde antallet af eksekveringer af denne erklæring pr. dag (forudsat ingen anden DML på TABLE_FOR_TESTS).

Bemærk:sysdate indeholder i sig selv en tidskomponent. trunc(sysdate) fjerner det og indstiller tiden til 00:00:00.




  1. Få tabelnavne ved hjælp af SELECT-sætning i MySQL

  2. Leder efter råd om en relateret videoforespørgsel på et tagget videosystem

  3. Oracle - Materialized View ændrer struktur så langsom

  4. myisam placere bordlås på bordet, selv når det drejer sig om 'vælg' forespørgsel?