ESQL 필드 참조

이 주제에서는 ESQL 필드 참조를 사용하여 메시지 본문 요소 경로를 형성하는 방법을 설명합니다.

필드 참조에 대한 전체 구문은 다음과 같습니다.

필드 참조는 상관 이름과 그 뒤에 점(.)으로 분리된 0개 이상의 필드로 구성되어 있습니다. 상관 이름은 잘 알려진 시작점을 식별하고 상수, 선언 변수(스칼라, 행 또는 참조) 또는 사전정의된 시작점 중 하나의 이름이어야 합니다(예: InputRoot). 경로 필드는 시작점에서 원하는 필드까지의 경로를 정의합니다.

예를 들면,
InputRoot.XML.Data.Invoice
이 예는 브로커가 위치 InputRoot(즉, Compute 노드에 대한 입력 메시지의 루트)에서 시작한 다음 탐색 순서를 수행하도록 합니다. 먼저 루트에서 첫 번째 하위 필드인 XML로 탐색한 다음 XML 필드의 첫 번째 하위 필드인 데이터로 탐색합니다. 마지막으로 브로커는 데이터 필드의 첫 번째 하위 필드인 송장(invoice)으로 탐색합니다. 이 필드 참조가 ESQL 프로그램에서 나타날 때마다 Invoice 필드에 액세스합니다.
이러한 형식의 필드 참조는 간단하고 편리하며 가장 자주 사용됩니다. 그러나 두 가지 제한사항이 따릅니다.
  • 사용되는 이름은 올바른 ESQL ID여야 하기 때문에 ESQL의 규칙을 따르는 이름만을 사용할 수 있습니다. 즉, 이름에는 밑줄을 포함한 영숫자 문자만이 포함될 수 있으며 첫 번째 문자는 숫자가 될 수 없고 이름의 길이는 최소한 한 자는 되어야 합니다. 이러한 규칙을 준수하지 않는 이름을 큰 따옴표로 묶어 제한사항을 적용하지 않을 수도 있습니다. 예를 들면,
    InputRoot.XML."Customer Data".Invoice
    따옴표가 포함된 필드를 참조해야 하는 경우 참조 주변에 두 쌍의 따옴표를 사용해야 합니다. 예를 들면,
    Body.Message."""hello"""

    일부 ID는 키워드로 예약되어 있지만 상관 이름을 제외하면 큰 따옴표를 사용하지 않아도 필드 참조에서 사용할 수 있습니다.

  • 필드의 이름은 ESQL 프로그램에 나타나기 때문에 프로그램이 작성될 때 알려져야 합니다. 이 제한사항은 중괄호( { ... } )를 사용하는 대체 구문을 사용하여 방지할 수 있습니다. 이 구문을 통해 character 유형의 널(null)이 아닌 값을 리턴하는 표현식을 사용할 수 있습니다.
    예를 들면,
    InputRoot.XML."Customer Data".{'Customer-' || 
    	CurrentCustomer}.Invoice
    이 경우 송장(invoice)은 이름이 문자 리터럴 Customer-를 CurrentCustomer의 값(이 예에서는 character 유형의 선언된 변수여야 함)과 병합하여 형성된 폴더에 있어야 합니다.

경로 요소에 별표(*) 와일드카드 문자를 사용하여 임의의 이름을 대응시킬 수 있습니다. 또한 "*"를 사용하여 부분 이름을 지정할 수도 있습니다. 예를 들면, Prefix*"Prefix"로 시작하는 임의의 이름에 대응합니다.

ESQL에서는 큰 따옴표로 묶으면 모두 ID가 됩니다. 작은 따옴표로 묶으면 모두 문자 리터럴이 됩니다. 작은따옴표로 모든 문자열을 묶어야 합니다.

다음을 참조하십시오.
  • 네임스페이스 및 이름의 여러 가지 조합을 의미하는 경우 네임스페이스
  • 필드 참조의 여러 가지 조합을 의미하는 경우 대상 필드 참조
  • 색인 절의 여러 가지 조합을 의미하는 경우 색인
  • 유형의 여러 가지 조합을 의미하는 경우 유형

네임스페이스

필드 이름은 네임스페이스에 속할 수 있습니다. 필드 참조는 다음과 같이 네임스페이를 위한 지원을 제공합니다.
  • 이름 절을 포함한 각 필드 참조의 각 필드에는 지정된 이름이 속하는 네임스페이스를 정의하는 네임스페이스 절도 포함할 수 있습니다.
  • 각 네임스페이스 이름은 간단한 ID나 표현식(중괄호로 묶어)으로 정의할 수 있습니다. ID를 사용하며 그 ID가 선언된 네임스페이스 상수의 이름인 경우 상수의 값이 사용됩니다. 표현식을 사용하는 경우 character 유형의 널(null)이 아닌 값을 리턴하게 됩니다.
  • *의 네임스페이스 절은 트리에서 필드를 찾을 때 네임스페이스 정보는 무시된다는 점을 명확하게 언급합니다.
  • ID, 표현식 또는 *가 없으며 :present 뿐인 네임스페이스 절은 명확하게 notarget 네임스페이스를 대상으로 합니다.

색인

필드 참조의 각 필드에는 색인 절이 포함될 수 있습니다. 이 절은 대괄호( [ ... ])로 표시되며 integer 유형의 널(null)이 아닌 값을 리턴하는 표현식을 승인합니다. 이 절은 동일한 이름의 여러 필드 중에서 선택할 것을 식별합니다. 필드는 첫 번째에서 1부터 시작하여 순서를 지정합니다. 이 절이 없는 경우 첫 번째 필드는 필수인 것으로 가정합니다. 따라서 아래에서 두 예의 의미는 정확히 동일합니다.
InputRoot.XML.Data[1].Invoice
InputRoot.XML.Data.Invoice[1] 
이 구조체는 색인 변수와 함께 가장 자주 사용되며 루프가 이러한 모든 필드를 순서대로 거치게 됩니다. 예를 들면,
WHILE count < 32 DO
          SET TOTAL = TOTAL + InputRoot.XML.Data.Invoice[count].Amount;
     SET COUNT = COUNT + 1 
END WHILE; 
이러한 종류의 구성은 브로커가 루프를 순환할 때마다 처음부터 필드를 계수해야 함을 의미하기 때문에 조심스럽게 사용하십시오. 반복 수가 큰 경우 성능이 좋지 않게 됩니다. 이 경우 필드 참조 변수를 사용하는 것이 보다 낫습니다.
색인 표현식은 선택적으로 부등호(보다 작음, < )로 시작할 수 있으며 필수 필드가 첫 번째 필드가 아닌 마지막 필드에서부터 색인이 표시될 것임을 나타냅니다. 이 경우, 색인 1은 마지막 필드를 나타내며 색인 2는 끝에서 두 번째 필드를 나타냅니다. 완전성을 위해 부등호(보다 크다)를 사용하여 첫 번째 필드부터 계수함을 나타낼 수 있습니다. 아래 예는 송장(invoice)라는 네 개의 필드가 있는 색인을 핸들하는 ESQL 코드를 표시합니다.
InputRoot.XML.Data.Invoice       -- Selects the first
InputRoot.XML.Data.Invoice[1]    -- Selects the first
InputRoot.XML.Data.Invoice[>] -- Selects the first
InputRoot.XML.Data.Invoice[>1] -- Selects the first
InputRoot.XML.Data.Invoice[>2] -- Selects the second
InputRoot.XML.Data.Invoice[<]    -- Selects the fourth
InputRoot.XML.Data.Invoice[<1]   -- Selects the fourth
InputRoot.XML.Data.Invoice[<2]   -- Selects the third
InputRoot.XML.Data.Invoice[<3]   -- Selects the second 
색인 절은 비어 있는 대괄호([]) 쌍으로 구성될 수도 있습니다. 이 구성은 이름이 일치하는 모든 필드를 선택합니다. 이목록을 예상하는 함수 및 명령문과 함께 이 구성체를 사용합니다(예: SELECT, CARDINALITY, SINGULAR 및 EXISTS 함수 또는 SET문).

유형

필드 참조의 각 필드에는 유형 절이 포함될 수 있습니다. 괄호(( ))로 표시되며 integer 유형의 널(null)이 아닌 값을 리턴하는 표현식을 승인합니다. 유형 표현식이 있으면 선택되는 필드가 일치하는 유형의 필드로 제한됩니다. 이 구성은 주로 일반 XML과 함께 사용하며 이 경우 많은 필드 유형이 있으며 하나의 XML 필드에 속성과 동일한 이름의 추가 XML 필드가 포함될 수 있습니다.

예를 들면,
<Item Value = '1234' >
     <Value>5678</Value>
</Item>

여기서, XML 필드 항목에는 "Value"라고 하는 두 개의 하위 필드가 있습니다. 하위 필드는 유형 절을 사용하여 구별할 수 있습니다. Item.(<Domain>.Attribute)Value를 사용하여 속성을 선택하고 Item.(XML.Element)Value를 사용하여 필드를 선택하십시오. 여기서 <Domain>은 소스의 메시지 도메인에서 판별한 대로 XML, XMLNS 또는 XMLNSC 중 하나입니다.

유형 제한조건

유형 제한조건은 필드 참조에서 리턴한 데이터 유형을 점검합니다.
주:
  1. ScalarDataTypeName은 BOOLEAN, INTEGER, INT, FLOAT, DECIMAL, DEC, DATE, TIME, TIMESTAMP, GMTTIME, GMTTIMESTAMP, INTERVAL, CHARACTER, CHAR, BLOB, BIT 중 하나일 수 있습니다.

일반적으로 유형 제한조건에 의해 참조의 스칼라 값이 추출되고(FIELDVALUE 함수와 유사한 방법으로) 올바른 유형의 참조가 아닌 경우 예외가 전달됩니다. 정의에 의하면 널(null)로 평가되기 때문에 존재하지 않는 모든 필드에 대해 예외가 전달됩니다. 이것은 필수 필드가 메시지에서 누락된 경우 예외를 발생시키는 편리하고 신속한 방법을 제공합니다.

그러나 데이터베이스에 전달될 후보인 표현식에서 유형 제한조건이 발생하는 경우(예: WHERE 절에 있는 경우), 이 정보는 표현식이 데이터베이스에 제공될 수 있는지 여부를 판별하는 데 사용됩니다. WHERE 절이 데이터베이스 테이블 열에서 작동하는 CAST를 포함하는 경우 중요할 수 있습니다. 유형 제한사항이 없으면 데이터베이스가 필수 변환을 수행할 수 있는지를 브로커가 판별할 수 없기 때문에 이러한 표현식을 데이터베이스에 제공할 수 없습니다. 그러나 일부 데이터베이스에서는 데이터 변환 기능을 지나치게 제한했기 때문에 열 값에서 작동하는 캐스트를 사용할 때 항상 주의해야 합니다.

요약

*, *[..], (..)*, (..)*[..]
어떠한 형식도 이름이나 네임스페이스를 지정하지 않습니다. 대상 필드는 임의의 네임스페이스에서 또는 네임스페이스가 없어도 임의의 이름을 가질 수 있습니다. 유형, 색인 또는 유형 및 색인별로 적절히 위치합니다.
NameId, NameId[..], (..)NameId, (..)NameId[..]
이러한 모든 형식은 네임스페이스가 아닌 이름을 지정합니다. 대상 필드는 네임스페이스 및 이름별로 위치하며 적절한 경우 유형 및 색인별로도 위치합니다.

해당 네임스페이스는 이 이름이 포함된 네임스페이스 경로에서 유일한 네임스페이스가 됩니다. 경로에 있을 수 있는 네임스페이스는 notarget 네임스페이스입니다.

이러한 형식은 모두 네임스페이스를 소개하기 전에 존재했습니다. 이제는 이름과 네임스페이스를 모두 비교한다는 점에서 작동은 변경되었지만 모든 기존의 변환이 notarget 네임스페이스에서 필드를 작성하기 때문에 기존의 변환은 아무런 작동의 변경을 발견하지 못합니다.

: *, :*[..], (..):*, (..):*[..]
이러한 모든 형식은 이름이 아닌 notarget 네임스페이스를 지정합니다. 대상 필드는 네임스페이스별로 위치하며 적절한 경우 유형 및 색인별로도 위치합니다.
:NameId, :NameId[..], (..):NameId, (..):NameId[..]
이러한 모든 형식은 이름 및 notarget 네임스페이스를 지정합니다. 대상 필드는 네임스페이스 및 이름별로 위치하며 적절한 경우 유형 및 색인별로도 위치합니다.
* :*, *:*[..], (..)*:*, (..)*:*[..]
어떠한 형식도 이름이나 네임스페이스를 지정하지 않습니다. "*:*""*"과 같으며, 임의의 네임스페이스는 물론 네임스페이스 없음에도 대응합니다. 대상 필드는 임의의 네임스페이스에서 또는 네임스페이스가 없어도 임의의 이름을 가질 수 있습니다. 유형, 색인 또는 유형 및 색인별로 적절히 위치합니다.
*:NameId, *:NameId[..], (..)*:NameId, (..)*:NameId[..]
이러한 모든 형식은 네임스페이스가 아닌 이름을 지정합니다. 대상 필드는 이름별로 위치하며 적절한 경우 유형 및 색인별로도 위치합니다.
SpaceId:*, SpaceId:*[..], (..)SpaceId:*, (..)SpaceId:*[..]
이러한 모든 형식은 이름이 아닌 네임스페이스를 지정합니다. 대상 필드는 네임스페이스별로 위치하며 적절한 경우 유형 및 색인별로도 위치합니다.
SpaceId:NameId, SpaceId:NameId[..], (..)SpaceId:NameId, (..)SpaceId:NameId[..]
이러한 모든 형식은 네임스페이스 및 이름을 지정합니다. 대상 필드는 네임스페이스 및 이름별로 위치하며 적절한 경우 유형 및 색인별로도 위치합니다.

앞의 모든 경우에서 중괄호({}) 안에 포함된 표현식에서 제공한 이름이나 네임스페이스는 ID로 제공된 이름과 동등합니다.

정의 상 notarget 네임스페이스의 이름은 비어 있는 문자열입니다. 비어 있는 문자열, 비어 있는 ID""로 평가되는 표현식이나 비어 있는 문자열로 정의된 네임스페이스 상수에 대한 참조를 사용하여 선택할 수 있습니다.

대상 필드 참조

필드 참조의 사용은 대개 기존 필드의 검색을 의미합니다. 그러나 대개 SET 문의 대상이며 SELECT 함수의 AS절에 있는 필드 참조의 경우와 같이 필드 참조가 존재하지 않는 경우에 작성됩니다.

이러한 상황에는 브로커가 필수 이름이나 네임스페이스가 무엇인지를 알려줄 수 없는 다양한 경우가 있으며 이러한 경우 다음의 일반 원칙이 적용됩니다.
  • 이름 절이 없거나 이름을 지정하지 않으며 네임스페이스 절이 없거나 네임스페이스를 지정 또는 의미하지 않는 경우(즉, 사용 가능한 이름 또는 네임스페이스가 없음) 다음의 조건 중 하나가 적용됩니다.
    • 지정 알고리즘이 일부 기존의 필드에서 이름을 복사하도록 선택하지 않은 경우 새 필드의 이름과 네임스페이스는 모두 비어 있는 문자열로 설정되며 이름 플래그는 자동으로 설정되지 않습니다.

      유형 스펙이 없는 경우 필드의 유형은 Name 또는 NameValue가 되지 않으며 새 필드에 이름이 없음을 효과적으로 나타냅니다

      .
    • 그렇지 않고 지정 알고리즘이 일부 기존의 필드에서 이름을 복사하도록 선택한 경우 새 필드에는 기존의 필드에서 복사된 이름과 네임스페이스가 모두 있으며 Name 플래그는 자동으로 설정됩니다.
  • 이름 절이 있으며 이름을 지정하지만 네임스페이스 절이 없거나 네임스페이스를 지정 또는 의미하지 않는 경우(즉, 이름을 사용 가능하지만 네임스페이스가 사용 가능하지 않음) 새 필드는 다음과 같습니다.
    • Name이 주어진 값으로 설정됩니다.
    • Namespace가 비어 있는 문자열로 설정됩니다.
    • Name 플래그가 자동으로 설정됩니다.
  • 이름 절이 없거나 이름을 지정하지 않지만 네임스페이스 절이 있으며 네임스페이스를 지정하거나 의미하는 경우(즉, 네임스페이스가 사용 가능하지만 이름이 사용 가능하지 않음) 새 필드는 다음과 같습니다.
    • Namespace가 주어진 값으로 설정됩니다.
    • Name이 비어 있는 문자열로 설정됩니다.
    • Name 플래그가 자동으로 설정됩니다.
  • 이름 절이 있으며 이름을 지정하고 네임스페이스 절이 있으며 네임스페이스를 지정하거나 의미하는 경우 새 필드는 다음과 같습니다.
    • Name이 주어진 값으로 설정됩니다.
    • Namespace가 주어진 값으로 설정됩니다.
    • Name 플래그가 자동으로 설정됩니다.
필드 참조에 의해 참조되는 것 이외에 브로커가 필드를 작성하는 경우도 있습니다.
  • 트리 복사: 소스 트리를 템플리트로 사용하는 알고리즘에 의해 새 필드가 작성됩니다. 알고리즘이 소스 필드의 이름을 새 필드로 복사하도록 선택한 경우 네임스페이스도 복사됩니다.
  • 익명 선택 표현식: SELECT절에 반드시 AS절이 있을 필요는 없습니다. AS절이 없는 SELECT절의 경우 새로 작성된 필드에 대한 이름이 디폴트 값으로 설정됩니다(SELECT 함수 참조).

    이러한 디폴트는 필드 이름, 열 이름에서 도출되거나 단순히 제조된 순서 이름일 수 있습니다. 이름이 필드 이름인 경우 효과적으로 트리 사본이며 네임스페이스 이름이 위와 같이 복사됩니다.

    그렇지 않은 경우 경로를 검색하여 새로 작성된 필드의 네임스페이스가 도출됩니다. 즉, 이러한 이름은 필드 참조의 NameId 구문인 것처럼 취급됩니다.

필드를 널(null)로 설정하는 효과

널값을 필드로 지정할 때 주의하십시오. 예를 들면, 다음 명령은 이름 필드를 삭제합니다.
 SET OutputRoot.XML.Msg.Data.Name = NULL;  -- this deletes the field
널값을 필드에 지정하는 올바른 방법은 다음과 같습니다.
SET OutputRoot.XML.Msg.Data.Name VALUE = NULL;  
-- 이것은 필드를 삭제하기 않고 필드에 널값을 지정합니다.
주: 역호환성이 필요한 사용자

역호환성을 위해 LAST 키워드는 여전히 지원되지만 사용은 줄어듭니다. LAST는 색인 표현식의 일부분으로 사용할 수 없습니다. [LAST]는 올바르며 [<]와 동등하지만 [LAST3]은 올바르지 않습니다.

LAST 키워드는 검색 및 색인의 방향을 모두 지정할 수 있도록 하는 다음의 화살표 구문으로 바뀌었습니다.
      Field [ > ] -- The first field, equivalent to [ 1 ]
      Field [ > (a + b) * 2 ]
      Field [ < ]                   -- The last field, equivalent to [ LAST ]
      Field [ < 1 ]	                -- The last field, equivalent to [ LAST ]
      Field [ < 2 ]	                -- The last but one field
            Field [ < (a + b) / 3 ]
관련 개념
ESQL 개요
주의사항 | 등록상표 | 다운로드 | 라이브러리 | 지원 | 피드백
Copyright IBM Corporation 1999, 2006 마지막 갱신 날짜: 2006/08/21
ak04861_