필드 참조는 상관 이름과 그 뒤에 점(.)으로 분리된 0개 이상의 필드로 구성되어 있습니다. 상관 이름은 잘 알려진 시작점을 식별하고 상수, 선언 변수(스칼라, 행 또는 참조) 또는 사전정의된 시작점 중 하나의 이름이어야 합니다(예: InputRoot). 경로 필드는 시작점에서 원하는 필드까지의 경로를 정의합니다.
InputRoot.XML.Data.Invoice이 예는 브로커가 위치 InputRoot(즉, Compute 노드에 대한 입력 메시지의 루트)에서 시작한 다음 탐색 순서를 수행하도록 합니다. 먼저 루트에서 첫 번째 하위 필드인 XML로 탐색한 다음 XML 필드의 첫 번째 하위 필드인 데이터로 탐색합니다. 마지막으로 브로커는 데이터 필드의 첫 번째 하위 필드인 송장(invoice)으로 탐색합니다. 이 필드 참조가 ESQL 프로그램에서 나타날 때마다 Invoice 필드에 액세스합니다.
InputRoot.XML."Customer Data".Invoice따옴표가 포함된 필드를 참조해야 하는 경우 참조 주변에 두 쌍의 따옴표를 사용해야 합니다. 예를 들면,
Body.Message."""hello"""
일부 ID는 키워드로 예약되어 있지만 상관 이름을 제외하면 큰 따옴표를 사용하지 않아도 필드 참조에서 사용할 수 있습니다.
InputRoot.XML."Customer Data".{'Customer-' || CurrentCustomer}.Invoice이 경우 송장(invoice)은 이름이 문자 리터럴 Customer-를 CurrentCustomer의 값(이 예에서는 character 유형의 선언된 변수여야 함)과 병합하여 형성된 폴더에 있어야 합니다.
경로 요소에 별표(*) 와일드카드 문자를 사용하여 임의의 이름을 대응시킬 수 있습니다. 또한 "*"를 사용하여 부분 이름을 지정할 수도 있습니다. 예를 들면, Prefix*는 "Prefix"로 시작하는 임의의 이름에 대응합니다.
ESQL에서는 큰 따옴표로 묶으면 모두 ID가 됩니다. 작은 따옴표로 묶으면 모두 문자 리터럴이 됩니다. 작은따옴표로 모든 문자열을 묶어야 합니다.
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;이러한 종류의 구성은 브로커가 루프를 순환할 때마다 처음부터 필드를 계수해야 함을 의미하기 때문에 조심스럽게 사용하십시오. 반복 수가 큰 경우 성능이 좋지 않게 됩니다. 이 경우 필드 참조 변수를 사용하는 것이 보다 낫습니다.
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 중 하나입니다.
일반적으로 유형 제한조건에 의해 참조의 스칼라 값이 추출되고(FIELDVALUE 함수와 유사한 방법으로) 올바른 유형의 참조가 아닌 경우 예외가 전달됩니다. 정의에 의하면 널(null)로 평가되기 때문에 존재하지 않는 모든 필드에 대해 예외가 전달됩니다. 이것은 필수 필드가 메시지에서 누락된 경우 예외를 발생시키는 편리하고 신속한 방법을 제공합니다.
그러나 데이터베이스에 전달될 후보인 표현식에서 유형 제한조건이 발생하는 경우(예: WHERE 절에 있는 경우), 이 정보는 표현식이 데이터베이스에 제공될 수 있는지 여부를 판별하는 데 사용됩니다. WHERE 절이 데이터베이스 테이블 열에서 작동하는 CAST를 포함하는 경우 중요할 수 있습니다. 유형 제한사항이 없으면 데이터베이스가 필수 변환을 수행할 수 있는지를 브로커가 판별할 수 없기 때문에 이러한 표현식을 데이터베이스에 제공할 수 없습니다. 그러나 일부 데이터베이스에서는 데이터 변환 기능을 지나치게 제한했기 때문에 열 값에서 작동하는 캐스트를 사용할 때 항상 주의해야 합니다.
앞의 모든 경우에서 중괄호({}) 안에 포함된 표현식에서 제공한 이름이나 네임스페이스는 ID로 제공된 이름과 동등합니다.
정의 상 notarget 네임스페이스의 이름은 비어 있는 문자열입니다. 비어 있는 문자열, 비어 있는 ID""로 평가되는 표현식이나 비어 있는 문자열로 정의된 네임스페이스 상수에 대한 참조를 사용하여 선택할 수 있습니다.
필드 참조의 사용은 대개 기존 필드의 검색을 의미합니다. 그러나 대개 SET 문의 대상이며 SELECT 함수의 AS절에 있는 필드 참조의 경우와 같이 필드 참조가 존재하지 않는 경우에 작성됩니다.
유형 스펙이 없는 경우 필드의 유형은 Name 또는 NameValue가 되지 않으며 새 필드에 이름이 없음을 효과적으로 나타냅니다
.이러한 디폴트는 필드 이름, 열 이름에서 도출되거나 단순히 제조된 순서 이름일 수 있습니다. 이름이 필드 이름인 경우 효과적으로 트리 사본이며 네임스페이스 이름이 위와 같이 복사됩니다.
그렇지 않은 경우 경로를 검색하여 새로 작성된 필드의 네임스페이스가 도출됩니다. 즉, 이러한 이름은 필드 참조의 NameId 구문인 것처럼 취급됩니다.
SET OutputRoot.XML.Msg.Data.Name = NULL; -- this deletes the field
SET OutputRoot.XML.Msg.Data.Name VALUE = NULL; -- 이것은 필드를 삭제하기 않고 필드에 널값을 지정합니다.
역호환성을 위해 LAST 키워드는 여전히 지원되지만 사용은 줄어듭니다. LAST는 색인 표현식의 일부분으로 사용할 수 없습니다. [LAST]는 올바르며 [<]와 동등하지만 [LAST3]은 올바르지 않습니다.
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 ]