Merge
Het voorvoegsel Merge kan aan elke LOAD- of SELECT-opdracht in het script worden toegevoegd om op te geven dat de geladen tabel met een andere tabel moet worden samengevoegd. Dit geeft ook aan dat deze opdracht met behulp van gedeeltelijk laden moet worden uitgevoerd.
De typische gebruikscase is als u een wijzigingslog laadt en deze wilt gebruiken om inserts, updates en deletes toe te passen voor een bestaande tabel.
Syntaxis:
Merge [only] [(SequenceNoField [, SequenceNoVar])] On ListOfKeys [Concatenate [(TableName)]] (loadstatement | selectstatement)
Tijdens een normale (niet-gedeeltelijke) lading werkt de constructie Merge LOAD als een normale Load-instructie, maar met de aanvullende functionaliteit dat verouderde records en records die zijn geselecteerd voor verwijdering, worden verwijderd. Het eerste veld van de load-instructie moet informatie over de bewerking bevatten: Insert, Update of Delete.
Voor elk record wordt de record-ID vergeleken met eerder geladen records en alleen het laatste record (op basis van het volgnummer) wordt behouden. Als het laatste record is gemarkeerd met Delete, wordt geen enkele record behouden.
Als de prefix Concatenate wordt gebruikt, of als er al een tabel met dezelfde verzameling velden aanwezig is, wordt dit de relevante tabel die kan worden gewijzigd. Anders wordt het resultaat van de constructie Merge LOAD opgeslagen in een nieuwe tabel.
Als de prefix Concatenate wordt gebruikt, heeft de resulterende tabel mogelijk meer velden dan de wijzigingslog die is gebruikt voor Merge.
Bij een gedeeltelijke lading gebeurt hetzelfde als bij een volledige lading. Het enige verschil is dat bij de constructie Merge LOAD nooit een nieuwe tabel wordt gemaakt. Er bestaat altijd een relevante tabel van de vorige uitvoering van het script die kan worden gewijzigd.
Als het geladen wijzigingslogboek een verzameld logboek is en dus wijzigingen bevat die al zijn geladen, kan de parameter SequenceNoVar worden gebruikt in een Where-clausule om het aantal ingevoerde gegevens te beperken. De constructie Merge LOAD kan vervolgens alleen worden gemaakt voor het laden van records waarbij het veld SequenceNoField groter is dan SequenceNoVar. Na voltooiing zal de constructie Merge LOAD een nieuwe waarde toewijzen aan de SequenceNoVar met de maximumwaarde die aanwezig is in het veld SequenceNoField.
Argumenten:
Argument | Beschrijving |
---|---|
only | Een optionele kwalificatie die aangeeft dat de opdracht alleen bij gedeeltelijke ladingen moet worden uitgevoerd. Deze moet worden genegeerd tijdens normale (niet-gedeeltelijke) ladingen. |
SequenceNoField | De naam van het veld dat een tijdsstempel of een volgnummer bevat dat de volgorde van de bewerkingen definieert. |
SequenceNoVar |
De naam van de variabele die de maximumwaarde krijg toegewezen voor SequenceNoField van de tabel die wordt samengevoegd. |
ListOfKeys | Een door komma's gescheiden lijst van veldnamen die de primaire sleutel aangeven. |
operation | Het eerste veld van de load-instructie moet de bewerking bevatten: Insert, Update of Delete. ‘i’, ‘u’ en ‘d’ worden ook geaccepteerd. |