Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Czy ktoś mógłby wyjaśnić, co tak naprawdę robi instrukcja MERGE w Oracle?

jaki rodzaj sprzężenia jest wykonywany? Myślę, że to pełne sprzężenie zewnętrzne, prawda?

Nie, to zwykłe sprzężenie zewnętrzne. Zapytanie musi wiedzieć, kiedy w tabeli docelowej znajdują się wiersze, które również znajdują się w tabeli źródłowej, a kiedy w tabeli źródłowej znajdują się rekordy, których nie ma w tabeli docelowej. Ponieważ zapytanie nie musi odpowiadać na wiersze, które znajdują się w tabeli docelowej, ale których nie ma w tabeli źródłowej, nie wymaga sprzężenia zewnętrznego, aby działać w obie strony.

Jednak zewnętrzne sprzężenie nie zostanie wykonane, jeśli nie ma not matched klauzula (która jest całkowicie poprawna). Optymalizator jest na tyle sprytny, że wie, że w takim przypadku wystarczy sprzężenie wewnętrzne.

w odniesieniu do części KIEDY DOPASOWANE:co się dzieje, gdy wiersz z t pasuje do wielu wierszy z s?

Gdy jest wiele dopasowań, aktualizacja jest wykonywana dla każdego dopasowania. Oznacza to, że ostatnia aktualizacja zostanie zapisana w zatwierdzeniu. Nie ma możliwości dyktowania kolejności, więc w tym przypadku źródło aktualizacji jest faktycznie losowe (z zestawu dopasowań).

Jak zauważył @ Vincent Malgrat, było to nieprawidłowe. Wygląda na to, że Oracle wygeneruje błąd „ORA-40926:nie można uzyskać stabilnego zestawu wierszy w tabeli źródłowej”, jeśli istnieje wiele dopasowań.

w odniesieniu do części KIEDY NIE DOPASOWANO, jak sądzę, oznacza to „kiedy wiersz w s nie ma korespondencji w t”. Czy mam rację?

Zgadza się.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zmienić nazwę kolumny tabeli w Oracle 10g?

  2. Czy istnieje odpowiednik Oracle SQL Server's OUTPUT INSERTED.*?

  3. Jak dodać wskaźnik AD/BC do daty w Oracle?

  4. Grupowanie rekordów godzina po godzinie lub dzień po dniu i wypełnianie luk zerem lub zerem

  5. Jak wyświetlić listę wszystkich procedur składowanych w bazie danych Oracle