병합
Merge 접두사를 스크립트의 LOAD 또는 SELECT 문에 추가하여 로드된 테이블을 다른 테이블에 병합하도록 지정할 수 있습니다. 또한 이 문을 부분 로드에서 실행하도록 지정합니다.
일반적인 사용 사례는 변경 로그를 로드하고 이를 사용하여 기존 테이블에 inserts, updates 및 deletes를 적용하려는 경우입니다.
구문:
Merge [only] [(SequenceNoField [, SequenceNoVar])] On ListOfKeys [Concatenate [(TableName)]] (loadstatement | selectstatement)
일반(부분적이지 않은) 다시 로드 중에 Merge LOAD 구성은 일반 Load 문으로 작동하지만 오래된 레코드 및 삭제 표시된 레코드를 제거하는 추가 기능을 사용합니다. LOAD 문의 첫 번째 필드에는 작업에 대한 정보가 있어야 합니다. Insert, Update 또는 Delete.
로드된 각 레코드에 대해 레코드 식별자는 이전에 로드된 레코드와 비교되고 최신 레코드(순서 번호에 따라)만 보관됩니다. 최신 기록이 Delete로 표시되면 아무것도 보관되지 않습니다.
Concatenate 접두사가 사용되거나 동일한 필드 집합이 있는 테이블이 이미 있는 경우 수정할 관련 테이블이 됩니다. 그렇지 않으면 Merge LOAD 구성의 결과가 새 테이블에 저장됩니다.
Concatenate 접두사가 사용되는 경우 결과 테이블에는 Merge에 대한 입력으로 사용되는 변경 로그보다 많은 필드가 있을 수 있습니다.
부분 다시 로드도 전체 다시 로드와 마찬가지입니다. 유일한 차이점은 Merge LOAD 구성이 새 테이블을 만들지 않는다는 것입니다. 수정할 이전 스크립트 실행의 관련 테이블이 항상 존재합니다.
로드된 변경 로그가 누적된 로그인 경우, 즉 이미 로드된 변경 사항이 포함된 경우 매개 변수 SequenceNoVar를 Where 절에서 사용하여 입력 데이터의 양을 제한할 수 있습니다. 그런 다음 필드 SequenceNoField이 SequenceNoVar보다 큰 레코드만 로드하도록 Merge LOAD를 수행할 수 있습니다. 완료되면 Merge LOAD는 SequenceNoField 필드에 표시된 최댓값으로 SequenceNoVar에 새 값을 할당합니다.
인수:
인수 | 설명 |
---|---|
only | 부분 다시 로드 중에만 문이 실행되어야 함을 지정하는 선택적인 한정자입니다. 일반(부분적이지 않은) 다시 로드 중에는 무시해야 합니다. |
SequenceNoField | 작업 순서를 정의하는 타임스탬프 또는 시퀀스 번호가 포함된 필드의 이름입니다. |
SequenceNoVar |
병합되는 테이블 SequenceNoField에 대해 최댓값이 할당되는 변수의 이름입니다. |
ListOfKeys | 기본 키를 지정하는 쉼표로 구분된 필드 이름 목록입니다. |
operation | LOAD 문의 첫 번째 필드에는 작업에 대한 정보가 포함되어야 합니다. Insert, Update 또는 Delete. ‘i’, ‘u’ 및 ‘d’도 허용됩니다. |