sql >> Databasteknik >  >> RDS >> Oracle

Oracle SQL Update-frågan tar dagar att uppdatera

Du kan prova detta

  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 );

Syntaxen ser till en början lite skrämmande ut, men om vi läser igenom uppifrån och ner är den ganska intuitiv. Observera följande satser:

•MERGE (rad 1):som tidigare nämnts är detta nu den fjärde DML-satsen i Oracle. Eventuella tips som vi kanske vill lägga till följer direkt detta nyckelord (dvs. SLUT /*+ HINT */);

•INTO (rad 2):så här anger vi målet för MERGE. Målet måste vara antingen en tabell eller en uppdateringsbar vy (en in-line-vy kan inte användas här);

•USING (rad 3):USING-satsen representerar källdatauppsättningen för MERGE. Detta kan vara en enkel tabell (som i vårt exempel) eller en in-line-vy;

•ON () (rad 4):ON-satsen är där vi tillhandahåller kopplingen mellan källdatauppsättningen och måltabellen. Observera att anslutningsvillkoren måste stå inom parentes;

•NÄR MATCHED (rad 5):den här satsen är där vi instruerar Oracle om vad vi ska göra när vi redan har en matchande post i måltabellen (dvs. det finns en koppling mellan käll- och måldatauppsättningarna). Vi vill uppenbarligen ha en UPPDATERING i det här fallet. En av begränsningarna i denna klausul är att vi inte kan uppdatera någon av kolumnerna som används i ON-satsen (även om vi naturligtvis inte behöver göra det eftersom de redan matchar). Varje försök att inkludera en sammanfogningskolumn kommer att skapa ett ointuitivt ogiltigt identifierareundantag; och

•NÄR INTE MATCHAR (rad 10):den här klausulen är där vi INFOGAR poster för vilka det inte finns någon aktuell matchning.



  1. ORACLE Castar DATUM till TIDSTÄMPEL MED TIDZON MED OFFSET

  2. MySQL-fråga med CASE för att VÄLJA flera kolumner

  3. Postgresql date_trunc med tidszon ändrar zon med 1 timme

  4. Hur tar man bort siffror och specialtecken från början av en sträng?