sql >> Database teknologi >  >> RDS >> Oracle

Oracle SQL Update-forespørgsel tager dage at opdatere

Du kan prøve dette

1 FLET 2 INTO target_table tgt 3 BRUG kildetabel src 4 ON ( src.object_id =tgt.object_id ) 5 NÅR MATCHED 6 SÅ 7 OPDATERING 8 SET tgt.object_name =src.object_name =src.object_name 9 .object_type 10 NÅR IKKE MATCHED 11 SÅ 12 INDSÆT ( tgt.object_id 13 , tgt.object_name 14 , tgt.object_type ) 15 VALUES ( src.object_id 16 , src.object_id , src.object_name rc.object_name rc.

Syntaksen ser i første omgang lidt skræmmende ud, men læser vi igennem fra top til bund, er den ret intuitiv. Bemærk følgende klausuler:

•MERGE (linje 1):som tidligere nævnt er dette nu den 4. DML-sætning i Oracle. Eventuelle hints, vi måtte ønske at tilføje, følger direkte dette søgeord (dvs. FLET /*+ TIP */);

•INTO (linje 2):dette er hvordan vi specificerer målet for FLUTNING. Målet skal enten være en tabel eller en opdatering, der kan opdateres (en in-line visning kan ikke bruges her);

•USING (linje 3):USING-udtrykket repræsenterer kildedatasættet for MERGE. Dette kan være en enkelt tabel (som i vores eksempel) eller en in-line visning;

•ON () (linje 4):ON-sætningen er, hvor vi leverer joinforbindelsen mellem kildedatasættet og måltabellen. Bemærk, at sammenføjningsbetingelserne skal stå i parentes;

•NÅR MATCHED (linje 5):denne klausul er, hvor vi instruerer Oracle om, hvad vi skal gøre, når vi allerede har en matchende post i måltabellen (dvs. der er en joinforbindelse mellem kilde- og måldatasættene). Vi ønsker naturligvis en OPDATERING i dette tilfælde. En af begrænsningerne i denne klausul er, at vi ikke kan opdatere nogen af ​​kolonnerne, der bruges i ON-klausulen (selvom vi selvfølgelig ikke behøver det, da de allerede matcher). Ethvert forsøg på at inkludere en join-kolonne vil rejse en unintuitiv ugyldig identifikator-undtagelse; og

•NÅR IKKE MATCHED (linje 10):denne klausul er, hvor vi INDSÆTTER poster, for hvilke der ikke er nogen aktuel match.



  1. At lave en enhedsrammemodel spænder over flere databaser

  2. Skriv skæv anomali i Oracle, og PostgreSQL ruller ikke tilbage transaktion

  3. kan ikke indlæse oci8 -> Fatal fejl:Kald til udefineret funktion oci_connect()

  4. At tælle hvor mange MySQL-felter i en række der er udfyldt (eller tomme)