sql >> Databasteknik >  >> RDS >> Oracle

Oracle MERGE:endast NOT MATCHED utlöses

Jag tror att du har missförstått vad sammanslagning är för något.

Jag skulle förvänta mig att ditt bord skulle vara något i stil med:

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

och sedan kan sammanslagningssatsen vara:

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)

där kopplingen finns på primärnyckeln i tabellen och antingen uppdatera eller infoga beroende på om posten för det PK-värdet finns.

Detta skulle ha maximalt en post per dag och t skulle innehålla antalet exekveringar av detta uttalande per dag (förutsatt att ingen annan DML på TABLE_FOR_TESTS).

Obs:sysdate i sig innehåller en tidskomponent. trunc(sysdate) tar bort det och ställer in tiden till 00:00:00.




  1. Vilken datamaskeringsfunktion ska jag använda?

  2. Unicode (grekiska) tecken lagras i databasen som ??????

  3. Oracles pro*C-kompilator och gnu C (__builtin_va_list, __attribute__, etc)

  4. Välja en kolumn från en tabell i MySQL två gånger