Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle MERGE:задейства се само NOT MATCHED

Мисля, че сте разбрали погрешно за какво служи сливането.

Очаквам вашата таблица да бъде нещо като:

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

и тогава изразът за сливане може да бъде:

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)

където съединението е на първичния ключ на таблицата и или актуализирайте, или вмъкнете в зависимост от това дали записът за тази PK стойност съществува.

Това ще има максимум един запис на ден и t ще съдържа броя изпълнения на този оператор на ден (приемайки, че няма друг DML на TABLE_FOR_TESTS).

Забележка:системната дата сама по себе си включва времеви компонент. trunc(sysdate) го премахва и задава часа на 00:00:00.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вземане на дъмп на таблици в oracle 10g чрез PL/SQL процедура

  2. Кога да използвате подсказки в заявка за оракул

  3. Модифициране на PLSQL функция за връщане на множество редове от една и съща колона

  4. Регулярен израз за REGEXP_SUBSTR в Oracle

  5. PRVG-2027 Собственикът на файла е непоследователен в различните възли