데이터베이스 열에서 데이터를 선택하고 출력 메시지에 포함하도록 Compute, Filter 또는 Database 노드를 구성할 수 있습니다. 다음 예에서는 Column1 및 Column2라고 하는 두 개의 char(6) 데이터 유형 열(또는 이와 동등한 것)이 있는 USERTABLE이라고 하는 데이터베이스 테이블이 있는 것으로 가정합니다. 다음 테이블은 두 개의 행을 포함합니다.
Column1 | Column2 | |
---|---|---|
행 1 | value1 | value2 |
행 2 | value3 | value4 |
테이블을 정의한 데이터베이스를 식별하도록 Compute, Filter 또는 Database 노드를 구성하십시오. 예를 들면, 디폴트 데이터베이스(노드의 "데이터 소스" 등록 정보에서 지정됨)를 사용 중인 경우, 노드를 마우스 오른쪽 단추로 누르고 ESQL 열기를 선택한 후 이 노드의 모듈에서 다음과 같은 ESQL 문을 코딩하십시오.
SET OutputRoot = InputRoot; DELETE FIELD OutputRoot.*[<]; SET OutputRoot.XML.Test.Result[] = (SELECT T.Column1, T.Column2 FROM Database.USERTABLE AS T);
다음 출력 메시지를 생성하게 됩니다.
<Test> <Result> <Column1>value1</Column1> <Column2>value2</Column2> </Result> <Result> <Column1>value3</Column1> <Column2>value4</Column2> </Result> </Test>
<Test> <Result> <Column1></Column1> <Column2></Column2> </Result> <Result> <Column1></Column1> <Column2></Column2> </Result> </Test>
XML의 정확한 구조는 중요하지 않지만 주변의 태그는 <Test>이어야 ESQL의 참조와 일치합니다. 이 태그가 없는 경우 ESQL문은 최상위 레벨 주변 태그를 작성하는데 이것은 올바른 XML이 아닙니다.
특정 조건에 맞는 모든 행의 모든 열을 포함하는 출력 메시지를 작성하려는 경우, WHERE절이 있는 SELECT문을 사용하십시오.
-- Declare and initialize a variable to hold the -- test vaue (in this case the surname Smith) DECLARE CurrentCustomer STRING 'Smith'; -- Loop through table records to extract matching information SET OutputRoot.XML.Invoice[] = (SELECT R FROM Database.USERTABLE AS R WHERE R.Customer.LastName = CurrentCustomer );
메시지 필드는 테이블에 표시된 열과 동일한 순서로 작성됩니다.
데이터베이스 환경의 SQL과 친숙한 경우, SELECT *를 코딩할 것으로 예상했을 것입니다. 상관 이름을 사용하여 열에 대한 모든 참조를 시작해야 하므로 이것은 브로커에서 승인되지 않습니다. 이것은 선언된 변수로 모호함을 없앱니다. 또한 SELECT I.*을 코딩하는 경우, 브로커에서 이것을 승인하지만 *는 첫 번째 하위 요소로 해석되며, 다른 데이터베이스 SQL에서 예상할 수 있는 모든 요소는 아닙니다.
데이터베이스 시스템이 대소문자를 구분하는 경우 대체 시도를 사용해야 합니다. 이 방법은 생성된 필드의 이름을 다르게 변경하려는 경우에도 필요합니다.
SET OutputRoot = InputRoot; SET OutputRoot.XML.Test.Result[] = (SELECT T.Column1 AS Column1, T.Column2 AS Column2 FROM Database.USERTABLE AS T);
이 예는 위의 예와 동일한 메시지를 생성합니다. 데이터베이스 열(예: T.Column1 및 T.Column2)에 대한 참조가 데이터베이스 정의와 정확히 일치하도록 올바른 대소문자로 지정되었는지 확인하십시오. 그렇지 않으면, 예를 들어 T.COLUMN1을 지정한 경우 브로커는 런타임 오류를 생성합니다. SELECT문에서 Column1 및 Column2 사용을 참고하십시오. 여기에서 임의 값을 사용할 수 있으며, 예에서 수행한 대로 데이터베이스에서 정의한 열의 이름과 일치하지 않습니다.