ROW 및 LIST 비교

ROW 및 LIST를 다른 ROW 및 LIST와 비교할 수 있습니다.

예 1

IF ROW(InputBody.Data.*[1],InputBody.Data.*[2]) =
                                  ROW('Raf' AS Name,'25' AS Age) THEN ...
IF LIST{InputBody.Data.Name, InputBody.Data.Age} = LIST{'Raf','25'} THEN ...
다음의 XML 입력 메시지 본문은 위의 두 명령문에 있는 IF 표현식이 모두 TRUE로 평가되도록 합니다.
<Data>
   <Name>Raf</Name>
   <Age>25</Age>
</Data>
LIST 사이의 비교에서는 각 요소의 값만이 비교되고, 반면 ROW 사이의 비교에서는 각 요소의 이름과 값이 모두 비교됩니다. 두 경우 모두에 비교되는 LIST 또는 ROW 피연산자의 카디낼리티 및 순차 순서는 두 피연산자가 동일하려면 동일해야 합니다. 다시 말해서 비교되는 피연산자의 순차 순서 또는 카디낼리티가 일치하지 않기 때문에 다음은 모두 거짓입니다.
ROW('alpha' AS A, 'beta' AS B) =
                          ROW('alpha' AS A, 'beta' AS B, 'delta' AS D)
ROW('alpha' AS A, 'beta' AS B) =
                          ROW('beta' AS B,'alpha' AS A)
LIST{1,2,3} = LIST{1,2,3,4}
LIST{3,2,1} = LIST{1,2,3}

예 2

다음의 ESQL을 고려해 보십시오.
IF InputBody.Places =
      ROW('Ken' AS first, 'Bob' AS second, 'Kate' AS third) THEN ...
다음의 XML 입력 메시지 본문은 위의 IF 표현식이 TRUE로 평가되도록 합니다.
<Places>
   <first>Ken</first>
   <second>Bob</second>
   <third>Kate</third>
</Places>

비교 연산자에 대한 피연산자 중 하나로 명확하게 구성된 ROW의 존재는 다른 피연산자도 ROW로 취급되도록 합니다.

이것을 다음과 같은 비교와 대조해 보십시오.
IF InputBody.Lottery.FirstDraw = InputBody.Lottery.SecondDraw THEN ...
ROW로 구성된 각 FirstDraw 및 SecondDraw의 하위 필드에 대한 이름 및 값이 아니라 FirstDraw 및 SecondDraw 필드의 값을 비교합니다. 따라서 다음과 같은 XML 입력 메시지 본문은,
<Lottery>
   <FirstDraw>wednesday
      <ball1>32</ball1>
      <ball2>12</ball2>
   </FirstDraw>
   <SecondDraw>saturday
      <ball1>32</ball1>
      <ball2>12</ball2>
   </SecondDraw>
</Lottery>
위의 IF 표현식이 TRUE로 평가되도록 하지 않습니다. ball 필드의 이름과 값이 아니라 값 wednesday와 saturday가 비교되기 때문입니다.

예 3

다음의 ESQL을 고려해 보십시오.
IF InputBody.Cities.City[] = LIST{'Athens','Sparta','Thebes'} THEN ...
다음의 XML 입력 메시지 본문은 IF 표현식이 TRUE로 평가되도록 합니다.
<Cities>
<City>Athens</City>
<City>Sparta</City>
<City>Thebes</City>
</Cities>
예를 들면, 다음과 같이 두 개의 메시지 필드 배열을 이러한 방식으로 함께 비교할 수 있습니다.
IF InputBody.Cities.Mediaeval.City[] = 
                                        InputBody.Cities.Modern.City[] THEN ...

IF InputBody.Cities.Mediaeval.*[] = InputBody.Cities.Modern.*[] THEN ...

IF InputBody.Cities.Mediaeval.(XML.Element)[] = 
                    InputBody.Cities.Modern.(XML.Element)[] THEN ...
다음의 XML 입력 메시지 본문은 위의 첫 번째 및 세 번째 명령문의 IF 표현식이 TRUE로 평가되도록 합니다.
<Cities>
   <Mediaeval>1350
      <City>London</City>
      <City>Paris</City>
   </Mediaeval>
   <Modern>1990
      <City>London</City>
      <City>Paris</City>
   </Modern>
</Cities>
그러나 두 번째 명령문의 IF 표현식은 FALSE로 평가됩니다. *[]는 (XML.Element)만이 아니라 Mediaeval 및 Modern의 모든 하위를 비교할 것임을 나타내기 때문입니다. 이 경우 Mediaeval 및 Modern의 이름 없는 하위를 형성하는 값 1350과 1990도 City 태그의 값과 함께 비교됩니다.
위의 세 번째 명령문의 IF 표현식은 다음과 같은 XML 입력 메시지 본문을 사용하여 TRUE로 평가됩니다.
<Cities>
   <Mediaeval>1350
      <Location>London</Location>
      <Location>Paris</Location>
   </Mediaeval>
   <Modern>1990
      <City>London</City>
      <City>Paris</City>
   </Modern>
</Cities>
LIST는 이름이 지정되지 않은 값으로 구성되어 있습니다. 비교되는 것은 이름이 아닌 Mediaeval 및 Modern의 하위 필드 값입니다.
관련 개념
ESQL 개요
관련 태스크
ESQL 개발
주의사항 | 등록상표 | 다운로드 | 라이브러리 | 지원 | 피드백
Copyright IBM Corporation 1999, 2006 마지막 갱신 날짜: 2006/08/21
ak05660_