sql >> Database >  >> RDS >> Oracle

Oracle SQL Update-query duurt dagen om te updaten

Je kunt dit proberen

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

De syntaxis ziet er in eerste instantie een beetje ontmoedigend uit, maar als we van boven naar beneden lezen, is het vrij intuïtief. Let op de volgende clausules:

•MERGE (regel 1):zoals eerder vermeld, is dit nu de 4e DML-instructie in Oracle. Alle hints die we zouden willen toevoegen, volgen dit trefwoord direct (bijv. MERGE /*+ HINT */);

•INTO (regel 2):​​zo specificeren we het doel voor de MERGE. Het doel moet een tabel of een bijwerkbare weergave zijn (een in-line weergave kan hier niet worden gebruikt);

•USING (regel 3):de clausule USING vertegenwoordigt de brongegevensset voor de MERGE. Dit kan een enkele tabel zijn (zoals in ons voorbeeld) of een in-line weergave;

•ON () (regel 4):de ON-clausule is waar we de join leveren tussen de brongegevensset en de doeltabel. Merk op dat de deelnamevoorwaarden tussen haakjes moeten staan;

•WHEN MATCHED (regel 5):in deze clausule geven we Oracle instructies over wat te doen als we al een overeenkomend record in de doeltabel hebben (d.w.z. er is een verbinding tussen de bron- en doelgegevenssets). Uiteraard willen we in dit geval een UPDATE. Een van de beperkingen van deze clausule is dat we geen van de kolommen die in de ON-clausule worden gebruikt, kunnen bijwerken (hoewel we dat natuurlijk niet hoeven te doen omdat ze al overeenkomen). Elke poging om een ​​join-kolom op te nemen, leidt tot een niet-intuïtieve uitzondering voor ongeldige ID's; en

•WHEN NOT MATCHED (regel 10):deze clausule is waar we records INVOEGEN waarvoor er geen huidige overeenkomst is.



  1. Hoe tekst te scheiden met behulp van subtekenreeks

  2. 1-1 Chatsysteem met PHP/MySQL

  3. voeg alle rijen van de tabel in een andere tabel in, enkele query

  4. Hoe kan ik MySQL-database converteren naar SQLite in PHP?