ExceptionList 트리는 자체 상관 이름인 ExceptionList를 가지므로, 이 트리의 컨텐츠를 참조하거나 설정하는 모든 ESQL문에서는 이를 사용해야 합니다.
이 트리는 입력 메시지가 구문 분석될 때 논리적 트리로 작성됩니다. 처음에는 공백이며, 메시지 플로우 처리 중 예외가 발생하는 경우에만 채워집니다. 예외가 두 번 이상 발생할 수 있는데, 이러한 경우 ExceptionList 트리는 각 예외에 대해 서브트리를 포함합니다.
Compute, Database 및 Filter 노드에서 ExceptionList 트리에 액세스할 수 있으며 Compute 노드에서 이 트리를 갱신할 수 있습니다. 적절한 상관 이름을 사용해야 합니다(Database나 Filter 노드의 경우 Exception List, Compute 노드의 경우 InputExceptionList).
오류 핸들링 프로시저에 있는 노드에서 이 트리에 액세스하려 할 수 있습니다. 예를 들어, 메시지를 예외 유형에 따라 다른 경로로 라우트하려 할 수 있습니다(예를 들어, ESQL THROW문을 사용하여 명시적으로 생성하거나 브로커가 생성한 경우에 따라).
다음 ESQL은 ExceptionList에 액세스하고 포함된 각 하위를 처리할 수 있는 방법을 보여줍니다.
-- Declare a reference for the ExceptionList -- (in a Compute node use InputExceptionList) DECLARE start REFERENCE TO ExceptionList.*[1]; -- Loop through the exception list children WHILE start.Number IS NOT NULL DO -- more ESQL -- Move start to the last child of the field to which it currently points MOVE start LASTCHILD; END WHILE;
아래의 두 번째 예에서는 Compute 노드가 마지막 중첩된 예외 설명까지 ExceptionList을 순환하여 오류 번호를 추출하도록 코딩한 ESQL을 보여줍니다. 이 오류는 문제 발생 원인과 관련이 있으며 일반적으로 가장 정확한 정보를 제공합니다. 메시지 플로우에서 수행하는 후속 조치는 이 방법으로 검색된 오류 번호에 의해 결정할 수 있습니다.
-- Declare variable for the Error number extracted from exception list DECLARE Error INTEGER; -- Declare current path within the exception list DECLARE Path CHARACTER; -- Start at first child of exception list SET Path = 'InputExceptionList.*[1]'; -- Loop until no more children WHILE EVAL( 'FIELDNAME(' || Path || ') IS NOT NULL' ) DO -- Check if error number is available IF EVAL( 'FIELDNAME(' || Path || '.Number) IS NOT NULL' ) THEN -- Record only the deepest error number SET Error = EVAL( Path || '.Number' ); END IF; -- Step to last child of current element (usually a nested exception list SET Path = Path || '.*[<]'; END WHILE;
ExceptionList 사용에 관한 자세한 정보는 ExceptionList의 구조를 조사하고 해당 컨텐츠에 따라 특정 조치를 수행하는 ESQL을 포함하는 Error Handler 샘플의 서브플로우를 참조하십시오.