DECLARE문은 변수, 변수의 데이터 유형과 선택적으로 초기값을 정의합니다.
BEGIN ... END 명령문의 ATOMIC 옵션도 참조하십시오. BEGIN ATOMIC 구성은 공유 변수에 여러 변경사항이 작성되어야 하는 경우에 유용하며 다른 인스턴스에서 데이터의 중간 상태를 볼 수 없도록 해야 합니다.
CONSTANT를 사용하여 상수를 정의합니다. 상수는 스키마, 모듈, 루틴 또는 복합 명령문 내에서 선언할 수 있습니다(내재적 및 명시적). 이러한 경우의 작동은 다음과 같습니다.
루틴 내에서 선언된 상수나 변수는 동일한 이름의 매개변수 및 포함된 모듈 또는 스키마에서 선언된 동일한 이름의 모든 상수와 변수를 겹쳐 쓴다는 점을 참고하십시오.
EXTERNAL을 사용하여 사용자 정의 등록 정보(UDP)를 나타냅니다. UDP는 초기값(DECLARE문에 의해 선택적으로 설정)이 설계 시 메시지 플로우 편집기에 의해 수정되거나 전개 시 브로커 아카이브 편집기에 의해 대체될 수 있는 사용자 정의 상수입니다. 이 값은 ESQL로 수정할 수 없습니다.
UDP의 개요는 ESQL의 사용자 정의 등록 정보를 참조하십시오.
UDP가 DECLARE문에서 초기값으로 제공된 경우 기본 설정됩니다. 그러나 설계 시 메시지 플로우나 전개 시 BAR 편집기에서 지정한 값(문자열의 길이가 0인 경우에도)은 DECLARE문에서 코드화된 초기값을 대체합니다.
메시지 플로우의 모든 UDP는 DECLARE문이나 메시지 플로우 또는 BAR 편집기에서 제공한 값이 있어야 합니다. 그렇지 않으면 전개 시 오류가 발생합니다. 런타임 시 UDP가 선언된 후 그 값은 후속 ESQL 문에서 조회할 수 있지만 수정할 수는 없습니다.
UDP의 장점은 전개 시 조작 직원이 해당 값을 변경할 수 있다는 점입니다. 예를 들면, UDP를 사용하여 구성 데이터를 보존하는 경우 노드 레벨에서 코드를 변경할 필요 없이 전개 시 특정 시스템, 작업 또는 환경에 대한 메시지 플로우를 구성할 수 있습니다.
모듈 또는 스키마에서만 UDP를 선언할 수 있습니다.
CAST가 발생하여 요청된 DataType으로 캐스트하므로 UDP의 데이터 유형을 지정할 때 주의하십시오.
DECLARE mycolour EXTERNAL CHARACTER ‘blue';
DECLARE TODAYSCOLOR EXTERNAL CHARACTER; SET COLOR = TODAYSCOLOR;여기서 TODAYSCOLOR는 CHARACTER의 TYPE과 메시지 플로우 편집기에서 설정한 VALUE가 있는 사용자 정의 등록 정보입니다.
NAME을 사용하여 변수가 알려질 수 있는 별명(다른 이름)을 정의하십시오.
-- The following statement gives Schema1 an alias of 'Joe'. DECLARE Schema1 NAME 'Joe'; -- The following statement produces a field called 'Joe'. SET OutputRoot.XML.Data.Schema1 = 42; -- The following statement inserts a value into a table called Table1 -- in the schema called 'Joe'. INSERT INTO Database.Schema1.Table1 (Answer) VALUES 42;
DECLARE Schema1 EXTERNAL NAME; CREATE FIRSTCHILD OF OutputRoot.XML.TestCase.Schema1 Domain('XML') NAME 'Node1' VALUE '1'; -- If Schema1 has been given the value 'red', the result would be: <xml version="1.0"?> <TestCase> <red> <Node1>1</Node1> </red>
NAMESPACE를 사용하여 네임스페이스가 알려질 수 있는 별명(다른 이름)을 정의하십시오.
이 예에서는 네임스페이스 선언, 경로에서 SpaceId로서의 사용 및 네임스페이스 표현식에서 문자 상수로서의 사용을 보여줍니다.
DECLARE prefixOne NAMESPACE 'http://www.example.com/PO1'; -- On the right hand side of the assignment a namespace constant -- is being used as such while, on the left hand side, one is -- being used as an ordinary constant (that is, in an expression). SET OutputRoot.XML.{prefixOne}:{'PurchaseOrder'} = InputRoot.XML.prefixOne:PurchaseOrder;
SHARED를 사용하여 공유 변수를 정의하십시오. 공유 변수는 플로우(스키마에서 선언된 경우) 또는 노드에 대해서는 개인용이지만 플로우(스레드)의 인스턴스 사이에는 공유됩니다. 플로우 레벨에서 보다 더 광범위하게 가시적인 변수 유형은 없습니다. 예를 들어, 실행 그룹을 통해 변수를 공유할 수 없습니다.
공유 변수는 메시지 플로우에서 메모리된 캐시를 구형하는데 사용되며 메시지 플로우 응답 시간 최적화를 참조하십시오. 공유 변수는 수명이 길고 플로우를 통해 전달되는 여러 메시지에서 볼 수 있습니다. 수명이 긴 변수를 참조하십시오. 실행 그룹 프로세스의 수명, 플로우 또는 노드의 수명 또는 변수를 선언하는 노드의 SQL의 수명 동안 존재합니다(가장 짧은 수명 동안). 각 브로커가 시작된 후 플로우 또는 노드를 통해 첫 번째 메시지가 전달될 때 초기화됩니다.
함수 또는 프로시저에서 공유 변수를 정의할 수 없습니다.
하나의 메시지보다 수명이 길지만 데이터베이스보다 수행이 더 좋은 이 읽기-쓰기 변수는 더 좋은 성능을 얻기 위해 데이터베이스의 지속성 및 트랜잭션 장점을 희생하도록 준비된 사용자에게 이상적입니다.
플로우 공유 변수(즉, 스키마 레벨에서 정의된 변수)에서는 특히 변수가 카운터로 사용되는 경우 여러 플로우에서 변수를 갱신할 수 있을 때 주의하십시오. 마찬가지로 노드 공유 변수(즉, 모듈 레벨에서 정의된 변수)에서는 여러 인스턴스에서 변수를 갱신할 수 있을 때 주의하십시오.
공유 행 변수를 사용하면 사용자 프로그램에서 입력 노드의 메시지의 효율적인 읽기/쓰기 사본을 작성할 수 있습니다. 이것은 일반적으로 유용하며 특히 큰 메시지 처리를 위한 기술을 단순화합니다.
"서브트리는 하나의 공유 행 변수에서 다른 공유 행 변수로 직접 복사할 수 없다는 제한사항이 있습니다. 서브트리는 비공유 행 변수를 사용하여 간접적으로 복사될 수 있습니다. 하나의 공유 행 변수에서 추출된(FIELDVALUE 함수 사용) 스칼라 값은 다른 공유 행 변수로 복사할 수 있습니다.
공유 변수의 사용 예는 공유 및 외부 변수 사용 방법을 보여주는 "메시지 라우팅" 샘플을 참조하십시오. "메시지 라우팅" 샘플은 Message Brokers Toolkit에 있는 샘플 갤러리에 있습니다.