sql >> Database >  >> RDS >> Oracle

Oracle MERGE:alleen NOT MATCHED wordt geactiveerd

Ik denk dat je verkeerd hebt begrepen waar samenvoegen voor is.

Ik zou verwachten dat je tafel er ongeveer zo uitziet:

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

en dan zou de samenvoegopdracht kunnen zijn:

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)

waarbij de join zich op de primaire sleutel van de tabel bevindt en wordt bijgewerkt of ingevoegd, afhankelijk van of het record voor die PK-waarde bestaat.

Dit zou maximaal één record per dag hebben en het zou het aantal uitvoeringen van deze verklaring per dag bevatten (ervan uitgaande dat er geen andere DML op TABLE_FOR_TESTS is).

Opmerking:sysdate zelf bevat een tijdcomponent. trunc(sysdate) verwijdert het en stelt de tijd in op 00:00:00.




  1. Agent is geblokkeerd

  2. Volgorde van toetredingsvoorwaarden belangrijk?

  3. =) Operator voor beginners

  4. Bash Script Loop Through MySQL