DECLARE문

DECLARE문은 변수, 변수의 데이터 유형과 선택적으로 초기값을 정의합니다.

구문

  1. SHARED 키워드는 함수 또는 프로시저에서 허용되지 않습니다.
  2. REFERENCE의 DataType으로 SHARED를 지정할 수 없습니다. (공유 변수에 메시지 트리를 저장하려면 ROW 데이터 유형을 사용하십시오.)
  3. EXTERNAL 변수는 내재적으로 일정합니다.
  4. EXTERNAL 변수에 초기값을 제공하는 것이 좋은 프로그래밍 습관입니다.
  5. REFERENCE의 DataType을 지정하는 경우 InitialValueExpression에서 (변수 또는 트리의) 초기값을 지정해야 합니다.
  6. NAMESPACENAME 절이 사용된 경우 값은 내재적으로 일정하고 유형이 CHARACTER입니다.

변수 유형

DECLARE문을 사용하여 세 가지 변수 유형을 정의할 수 있습니다.
외부
외부 변수(EXTERNAL 키워드로 정의)는 사용자 정의 등록 정보(UDP)라고도 합니다(ESQL의 사용자 정의 등록 정보 참조). 외부 변수는 메시지 플로우의 전체 수명 동안 존재하며, 플로우를 통과하는 모든 메시지에서 볼 수 있습니다. 초기값(선택적으로 DECLARE문으로 설정)은 설계 시 메시지 플로우 편집기에 의해 수정되거나 전개 시 BAR 편집기에 의해 수정됩니다. 이 값은 ESQL로 수정할 수 없습니다.
정상
"정상" 변수는 노드를 통해 전달되는 단일 메시지의 수명을 갖습니다. 이 변수는 해당 메시지에서만 볼 수 있습니다. "정상" 변수를 정의하려면 EXTERNAL 키워드와 SHARED 키워드 모두를 생략하십시오.
공유
공유 변수를 사용하여 메시지 플로우에서 메모리 내 캐시를 구현할 수 있습니다. 메시지 플로우 응답 시간 최적화를 참조하십시오. 공유 변수는 수명이 길고 플로우를 통해 전달되는 여러 메시지에서 볼 수 있습니다(수명이 긴 변수 참조). 실행 그룹 프로세스의 수명, 플로우 또는 노드의 수명 또는 변수를 선언하는 노드의 SQL의 수명 동안 존재합니다(가장 짧은 수명 동안). 각 브로커가 시작된 후 플로우 또는 노드를 통해 첫 번째 메시지가 전달될 때 초기화됩니다.

BEGIN ... END 명령문의 ATOMIC 옵션도 참조하십시오. BEGIN ATOMIC 구성은 공유 변수에 여러 변경사항이 작성되어야 하는 경우에 유용하며 다른 인스턴스에서 데이터의 중간 상태를 볼 수 없도록 해야 합니다.

CONSTANT

CONSTANT를 사용하여 상수를 정의합니다. 상수는 스키마, 모듈, 루틴 또는 복합 명령문 내에서 선언할 수 있습니다(내재적 및 명시적). 이러한 경우의 작동은 다음과 같습니다.

루틴 내에서 선언된 상수나 변수는 동일한 이름의 매개변수 및 포함된 모듈 또는 스키마에서 선언된 동일한 이름의 모든 상수와 변수를 겹쳐 쓴다는 점을 참고하십시오.

DataType

DataType에 지정할 수 있는 가능한 값은 다음과 같습니다.
  • BOOL
  • BOOLEAN
  • INT
  • INTEGER
  • FLOAT
  • DEC
  • DECIMAL
  • DATE
  • TIME
  • TIMESTAMP
  • GMTTIME
  • GMTTIMESTAMP
  • INTERVAL: 외부 변수에 적용하지 않음(EXTERNAL 옵션 지정됨)
  • CHAR
  • CHARACTER
  • BLOB
  • BIT
  • ROW: 외부 변수에 적용하지 않음(EXTERNAL 옵션 지정됨)
  • REF: 외부 또는 공유 변수에 적용하지 않음(EXTERNAL 또는 SHARED 옵션 지정됨)
  • REFERENCE-TO: 외부 또는 공유 변수에 적용하지 않음(EXTERNAL 또는 SHARED 옵션 지정됨)
주: REFERENCE의 DataType을 지정하는 경우 InitialValueExpression도 지정해야 합니다.

EXTERNAL

EXTERNAL을 사용하여 사용자 정의 등록 정보(UDP)를 나타냅니다. UDP는 초기값(DECLARE문에 의해 선택적으로 설정)이 설계 시 메시지 플로우 편집기에 의해 수정되거나 전개 시 브로커 아카이브 편집기에 의해 대체될 수 있는 사용자 정의 상수입니다. 이 값은 ESQL로 수정할 수 없습니다.

UDP의 개요는 ESQL의 사용자 정의 등록 정보를 참조하십시오.

UDP가 DECLARE문에서 초기값으로 제공된 경우 기본 설정됩니다. 그러나 설계 시 메시지 플로우나 전개 시 BAR 편집기에서 지정한 값(문자열의 길이가 0인 경우에도)은 DECLARE문에서 코드화된 초기값을 대체합니다.

메시지 플로우의 모든 UDP는 DECLARE문이나 메시지 플로우 또는 BAR 편집기에서 제공한 값이 있어야 합니다. 그렇지 않으면 전개 시 오류가 발생합니다. 런타임 시 UDP가 선언된 후 그 값은 후속 ESQL 문에서 조회할 수 있지만 수정할 수는 없습니다.

UDP의 장점은 전개 시 조작 직원이 해당 값을 변경할 수 있다는 점입니다. 예를 들면, UDP를 사용하여 구성 데이터를 보존하는 경우 노드 레벨에서 코드를 변경할 필요 없이 전개 시 특정 시스템, 작업 또는 환경에 대한 메시지 플로우를 구성할 수 있습니다.

모듈 또는 스키마에서만 UDP를 선언할 수 있습니다.

다음의 브로커 노드 유형은 UDP에 액세스할 수 있습니다.
  • Compute
  • Database
  • Filter
  • 이 노드 유형에서 도출된 노드

CAST가 발생하여 요청된 DataType으로 캐스트하므로 UDP의 데이터 유형을 지정할 때 주의하십시오.

예 1

DECLARE mycolour EXTERNAL CHARACTER ‘blue'; 

예 2

DECLARE TODAYSCOLOR EXTERNAL CHARACTER;
SET COLOR = TODAYSCOLOR;
여기서 TODAYSCOLORCHARACTERTYPE과 메시지 플로우 편집기에서 설정한 VALUE가 있는 사용자 정의 등록 정보입니다.

NAME

NAME을 사용하여 변수가 알려질 수 있는 별명(다른 이름)을 정의하십시오.

예 1

-- 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; 

예 2

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

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

SHARED를 사용하여 공유 변수를 정의하십시오. 공유 변수는 플로우(스키마에서 선언된 경우) 또는 노드에 대해서는 개인용이지만 플로우(스레드)의 인스턴스 사이에는 공유됩니다. 플로우 레벨에서 보다 더 광범위하게 가시적인 변수 유형은 없습니다. 예를 들어, 실행 그룹을 통해 변수를 공유할 수 없습니다.

공유 변수는 메시지 플로우에서 메모리된 캐시를 구형하는데 사용되며 메시지 플로우 응답 시간 최적화를 참조하십시오. 공유 변수는 수명이 길고 플로우를 통해 전달되는 여러 메시지에서 볼 수 있습니다. 수명이 긴 변수를 참조하십시오. 실행 그룹 프로세스의 수명, 플로우 또는 노드의 수명 또는 변수를 선언하는 노드의 SQL의 수명 동안 존재합니다(가장 짧은 수명 동안). 각 브로커가 시작된 후 플로우 또는 노드를 통해 첫 번째 메시지가 전달될 때 초기화됩니다.

함수 또는 프로시저에서 공유 변수를 정의할 수 없습니다.

데이터베이스에 상대적으로 공유 변수의 장점은 다음과 같습니다.
  • 쓰기 액세스가 매우 빠릅니다.
  • 작은 데이터 구조에 대한 읽기 액세스가 더 빠릅니다.
  • 액세스가 직접적입니다. 즉, 특수 함수(SELECT)를 사용하여 데이터를 가져오거나 특수 명령문(INSERT, UPDATE 또는 DELETE)을 사용하여 데이터를 수정할 필요가 없습니다. 대신 표현식에서 데이터를 직접 참조할 수 있습니다.
공유 변수와 상대적으로 데이터베이스의 장점은 다음과 같습니다.
  • 데이터가 영구적입니다.
  • 데이터가 트랜잭션 방식으로 변경됩니다.

하나의 메시지보다 수명이 길지만 데이터베이스보다 수행이 더 좋은 이 읽기-쓰기 변수는 더 좋은 성능을 얻기 위해 데이터베이스의 지속성 및 트랜잭션 장점을 희생하도록 준비된 사용자에게 이상적입니다.

플로우 공유 변수(즉, 스키마 레벨에서 정의된 변수)에서는 특히 변수가 카운터로 사용되는 경우 여러 플로우에서 변수를 갱신할 수 있을 때 주의하십시오. 마찬가지로 노드 공유 변수(즉, 모듈 레벨에서 정의된 변수)에서는 여러 인스턴스에서 변수를 갱신할 수 있을 때 주의하십시오.

공유 행 변수를 사용하면 사용자 프로그램에서 입력 노드의 메시지의 효율적인 읽기/쓰기 사본을 작성할 수 있습니다. 이것은 일반적으로 유용하며 특히 큰 메시지 처리를 위한 기술을 단순화합니다.

"서브트리는 하나의 공유 행 변수에서 다른 공유 행 변수로 직접 복사할 수 없다는 제한사항이 있습니다. 서브트리는 비공유 행 변수를 사용하여 간접적으로 복사될 수 있습니다. 하나의 공유 행 변수에서 추출된(FIELDVALUE 함수 사용) 스칼라 값은 다른 공유 행 변수로 복사할 수 있습니다.

공유 변수의 사용 예는 공유 및 외부 변수 사용 방법을 보여주는 "메시지 라우팅" 샘플을 참조하십시오. "메시지 라우팅" 샘플은 Message Brokers Toolkit에 있는 샘플 갤러리에 있습니다.

관련 개념
ESQL 개요
ESQL의 사용자 정의 등록 정보
관련 태스크
ESQL 개발
동적 필드 참조 작성
UDP를 사용하여 전개 시 메시지 플로우 구성
관련 참조
구문 다이어그램: 사용 가능한 유형
ESQL문
메시지 플로우 내의 ESQL 데이터 유형
메시지 플로우 편집기
FIELDVALUE 함수
주의사항 | 등록상표 | 다운로드 | 라이브러리 | 지원 | 피드백
Copyright IBM Corporation 1999, 2006 마지막 갱신 날짜: 2006/08/21
ak04980_