Merge
Do dowolnej instrukcji LOAD lub SELECT w skrypcie można dodać prefiks Merge, aby określić, że ładowana tabela powinna zostać scalona w innej tabeli. Określa on również, że ta instrukcja powinna być uruchamiana podczas częściowego ładowania.
Typowym użyciem jest załadowanie dziennika zmian i wykorzystanie go do zastosowania inserts, updates oraz deletes do istniejącej tabeli.
Składnia:
Merge [only] [(SequenceNoField [, SequenceNoVar])] On ListOfKeys [Concatenate [(TableName)]] (loadstatement | selectstatement)
Podczas normalnego (nie częściowego) ładowania konstrukcja Merge LOAD będzie działać jako normalna instrukcja Load, ale z dodatkową funkcjonalnością polegającą na usuwaniu starszych, zbędnych rekordów oraz rekordów oznaczonych do usunięcia. Pierwsze pole instrukcji load musi zawierać informacje o operacji: Insert, Update lub Delete.
W przypadku każdego załadowanego rekordu identyfikator rekordu zostanie porównany z wcześniej załadowanymi rekordami i zachowany zostanie tylko najnowszy rekord (zgodnie z numeracją). Jeśli najnowszy rekord jest oznaczony Delete, żadne rekordy nie zostaną zachowane.
Jeśli będzie używany prefiks Concatenate lub jeśli będzie istnieć tabela z tym samym zestawem pól, będzie to odpowiednia tabela do zmodyfikowania. W przeciwnym razie wynik konstrukcji Merge LOAD zostanie zapisany w nowej tabeli.
Jeśli będzie używany prefiks Concatenate, wynikowa tabela może mieć więcej pól niż dziennik zmian, który jest używany jako dane wejściowe dla polecenia Merge.
Częściowe ładowanie da takie same rezultaty jak pełne. Jedyna różnica polega na tym, że konstrukcja Merge LOAD nigdy nie utworzy nowej tabeli. Zawsze istnieje odpowiednia tabela z poprzedniego wykonania skryptu do zmodyfikowania.
Jeśli załadowany dziennik zmian jest dziennikiem akumulowanym, to znaczy zawiera zmiany, które zostały już załadowane, można użyć parametru SequenceNoVar w klauzuli Where w celu ograniczenia ilości danych wejściowych. Konstrukcji Merge LOAD można wówczas użyć do załadowania tylko rekordów, w których wartość pola SequenceNoField jest większa niż SequenceNoVar. Po zakończeniu konstrukcja Merge LOAD przypisze nową wartość do SequenceNoVar z maksymalną wartością widoczną w polu SequenceNoField.
Argumenty:
Argument | Opis |
---|---|
only | Opcjonalny kwalifikator wskazujący, że instrukcja ma być wykonywana tylko podczas częściowego ładowania. Należy go pominąć podczas normalnych (nie częściowych) ładowań. |
SequenceNoField | Nazwa pola zawierającego znacznik czasu lub numer kolejny, który definiuje kolejność operacji. |
SequenceNoVar |
Nazwa zmiennej, której przypisywana jest maksymalna wartość SequenceNoField scalanej tabeli. |
ListOfKeys | Lista nazw pól oddzielonych przecinkami, określająca klucz podstawowy. |
operation | Pierwsze pole instrukcji load musi zawierać operację: Insert, Update lub Delete. „i”, 'u” i „d”są również akceptowane. |