알 수 없는 다중 발생 요소에 액세스

반복 수를 알 수 없는 반복 필드가 있는 메시지를 처리하는 경우가 있습니다. 이러한 상황은 메시지 예Item 필드에서 발생합니다.

Item 필드의 모든 인스턴스를 고려하는 필터를 작성하려면 반복 필드의 모든 인스턴스에서 반복될 수 있는 구조체를 사용해야 합니다. 한정 술어를 통해 반복 필드의 모든 인스턴스에 대해 술어를 실행하고 결과를 조합할 수 있습니다.

예를 들면, 순서가 지정 중인 어느 항목도 수량이 50보다 크지 않음을 확인하고자 할 수도 있습니다. 이를 수행하기 위해 다음을 작성할 수 있습니다.

FOR ALL Body.Invoice.Purchases."Item"[] 
    AS I (I.Quantity <= 50)

한정 술어를 사용할 때, 첫 번째로 주의할 것은 필드 참조 끝에서 FOR ALL 뒤에 있는 대괄호 []입니다. Item 필드의 모든 인스턴스에서 반복하고 있음을 알려줍니다.

컨텍스트에서 해당 정보를 얻을 수 있기 때문에 어떤 경우에는 이 구문이 불필요해 보이지만 다른 구문 조각과의 일관성을 위해 수행됩니다.

AS절은 이름 I를 반복 필드의 현재 인스턴스와 연관시킵니다. 이것은 C++과 같은 일부 오브젝트 지향 언어에서 사용되는 반복자 클래스의 개념과 비슷합니다. 괄호 안의 표현식은 Item 필드의 각 인스턴스에 대해 평가되는 술어입니다.

다음은 이 예에 대한 설명입니다.

Body.Invoice 내에 있는 필드 Item의 모든 인스턴스에서 반복됩니다. 반복될 때마다,
  1. 이름 IItem의 현재 인스턴스에 바인딩합니다.
  2. 술어 I.Quantity <= 50을 평가합니다. 술어가
    • Item의 모든 인스턴스에 대해 TRUE로 평가되면 TRUE를 리턴합니다.
    • Item의 인스턴스에 대해 FALSE이면 FALSE를 리턴합니다.
    • TRUE와 UNKNOWN이 혼합된 경우 UNKNOWN을 리턴합니다.

위의 내용은 ALL 키워드를 사용하는 경우 술어가 평가되는 방법에 대한 설명입니다. 대신 동등한 SOME 또는 ANY를 지정할 수 있습니다. 이 경우 하위 술어가 반복 필드의 인스턴스에 대해 TRUE를 리턴하면 한정 술어는 TRUE를 리턴합니다. 하위 술어가 반복 필드의 모든 인스턴스에 대해 FALSE를 리턴하는 경우에만 한정 술어가 FALSE를 리턴합니다. 하위 술어에서 FALSE 및 UNKNOWN 값이 혼합되어 리턴된 경우 전체 UNKNOWN 값이 리턴됩니다.

다음 필터 표현식에서,

FOR ANY Body.Invoice.Purchases."Item"[]  
    AS I (I.Title = 'The XML Companion')

하위 술어는 TRUE로 평가됩니다. 그러나 다음 표현식은 FALSE를 리턴합니다.

FOR ANY Body.Invoice.Purchases."Item"[] 
    AS I (I.Title = 'C Primer')

C Primer는 이 송장(invoice)에 포함되지 않기 때문입니다. 송장(invoice)의 일부 항목에 책 제목 필드가 포함되지 않은 경우 하위 술어는 UNKNOWN을 리턴하며 한정 술어는 값 UNKNOWN을 리턴합니다.

널(null) 값이 표시될 수 있는 상황을 처리하려면 다음과 같이 필드의 존재를 명확히 점검하여 이 필터를 작성하십시오.
FOR ANY Body.Invoice.Purchases."Item"[] 
	 AS I (I.Book IS NOT NULL AND I.Book.Title = 'C Primer')

IS NOT NULL 술어는 Item 필드에 Book이 포함되지 않은 경우 하위 술어에서 FALSE 값이 리턴되도록 합니다.

데이터베이스에서 참조 열에 설명된 대로 SELECT 표현식을 사용하여 메시지 내에서 임의의 필드 반복을 조작할 수도 있습니다.

인스턴스 수를 알지 못하는 경우에도 [>] 및 [<] 배열 색인을 사용하는 반복 필드의 첫 번째 인스턴스와 마지막 인스턴스 및 첫 번째와 마지막 인스턴스와 관련된 인스턴스를 참조할 수 있습니다. 이러한 색인은 알려진 다중 발생 요소에 액세스에 설명되어 있습니다.

또는 CARDINALITY 함수를 사용하여 반복 필드의 인스턴스 수를 판별할 수 있습니다. 예를 들면, 다음 코드와 같습니다.

DECLARE I INTEGER CARDINALITY(Body.Invoice.Purchases."Item"[])
관련 개념
메시지 플로우 개요
ESQL 개요
메시지 모델링
관련 태스크
알려진 다중 발생 요소에 액세스
메시지 플로우 설계
메시지 플로우 컨텐츠 정의
ESQL 파일 관리
관련 참조
Compute 노드
Database 노드
Filter 노드
ESQL 참조
CARDINALITY 함수
DECLARE문
FOR 함수
메시지 예
주의사항 | 등록상표 | 다운로드 | 라이브러리 | 지원 | 피드백
Copyright IBM Corporation 1999, 2006 마지막 갱신 날짜: 2006/08/21
ac16770_