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

Актуализацията на Oracle SQL Update отнема дни

Можете да опитате това

  1  MERGE
  2     INTO  target_table tgt
  3     USING source_table src
  4     ON  ( src.object_id = tgt.object_id )
  5  WHEN MATCHED
  6  THEN
  7     UPDATE
  8     SET   tgt.object_name = src.object_name
  9     ,     tgt.object_type = src.object_type
 10  WHEN NOT MATCHED
 11  THEN
 12     INSERT ( tgt.object_id
 13            , tgt.object_name
 14            , tgt.object_type )
 15     VALUES ( src.object_id
 16            , src.object_name
 17            , src.object_type );

Синтаксисът първоначално изглежда малко плашещ, но ако прочетем отгоре надолу, той е доста интуитивен. Обърнете внимание на следните клаузи:

•MERGE (ред 1):както беше посочено по-рано, сега това е 4-ият DML оператор в Oracle. Всички съвети, които бихме искали да добавим, следват директно тази ключова дума (т.е. MERGE /*+ HINT */);

• INTO (ред 2):така определяме целта за MERGE. Целта трябва да бъде или таблица, или актуализиран изглед (тук не може да се използва вграден изглед);

•USING (ред 3):клаузата USING представлява изходния набор от данни за MERGE. Това може да бъде единична таблица (както в нашия пример) или вграден изглед;

•ON () (ред 4):клаузата ON е мястото, където осигуряваме свързването между изходния набор от данни и целевата таблица. Имайте предвид, че условията за присъединяване трябва да са в скоби;

• WHEN MATCHED (ред 5):тази клауза е мястото, където инструктираме Oracle какво да прави, когато вече имаме съвпадащ запис в целевата таблица (т.е. има съединение между изходния и целевия набор от данни). Очевидно искаме АКТУАЛИЗАЦИЯ в този случай. Едно от ограниченията на тази клауза е, че не можем да актуализираме нито една от колоните, използвани в клаузата ON (въпреки че, разбира се, не е необходимо, тъй като те вече съвпадат). Всеки опит за включване на колона за присъединяване ще предизвика неинтуитивно изключение за невалиден идентификатор; и

• WHEN NOT MATCHED (ред 10):тази клауза е мястото, където ВМЪКВАМЕ записи, за които няма текущо съвпадение.



  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 с помощта на Show_Alert

  2. Как да ограничим таблица на база данни, така че само един ред да има определена стойност в колона?

  3. Преглед на приложението oracle и получаване на:java.lang.ClassNotFoundException:oracle.forms.engine.Main

  4. Проблем с формата на Symfony + Doctrine Oracle DateTime

  5. Преобразуване между клаузи в съединения