-
[IBM] 새 Compute Node 작성하기 by ESQLETC. 2020. 5. 22. 13:54반응형
IIB의 메시지 플로우에서 Compute Node 를 추가한 뒤 더블클릭하면
.esql파일이 열린다.
아래와 같이 기본적인 소스가 작성되어있어 여기에 추가 작성하여 개발한다.BROKER SCHEMA MB_TEST -- 프로젝트명 CREATE COMPUTE MODULE MB_TEST_SUBFLOW_Compute -- Compute 노드명 CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN -- CALL CopyMessageHeaders(); -- CALL CopyEntireMessage(); -- 데이터 처리 로직 추가 RETURN TRUE; END; CREATE PROCEDURE CopyMessageHeaders() BEGIN DECLARE I INTEGER 1; DECLARE J INTEGER; SET J = CARDINALITY(InputRoot.*[]); WHILE I < J DO SET OutputRoot.*[I] = InputRoot.*[I]; SET I = I + 1; END WHILE; END; CREATE PROCEDURE CopyEntireMessage() BEGIN SET OutputRoot = InputRoot; END; END MODULE;데이터 처리 과정에서 가장 많이 사용되는 몇가지 ESQL 구문들을 살펴보면 아래와 같다.
변수관련 내용은 이전글에 언급하여 생략한다.IF
IF i = 0 THEN SET size = 'small'; ELSEIF i = 1 THEN SET size = 'medium'; ELSEIF j = 4 THEN SET size = 'large'; ELSE SET size = 'unknown'; END IF; IF J> MAX THEN SET J = MAX; SET Limit = TRUE; END IF;WHILE
DECLARE i INTEGER; SET i = 1; X : WHILE i <= 3 DO ... SET i = i + 1; END WHILE X;REPEAT
명령문을 처리한 후 조건을 확인. JAVA의 Do While문과 동일한 구조라고 보면 된다.
DECLARE i INTEGER; SET i = 1; X : REPEAT ... SET i = i + 1; UNTIL i>= 3 END REPEAT X;THROW
예외를 생성하기 위해 사용하는 키워드로 두가지 선택적 옵션이 있다.
CATALOG
생략하는 경우 CATALOG는 IBM® Integration Bus 현재 버전 카탈로그로 기본 설정
현재 버전 메시지 카탈로그를 명시적으로 사용하려면 모든 운영 체제에서 BIPmsgs를 사용MESSAGE
생략하는 경우 기본 카탈로그(2951)에서 THROW문 사용을 위해 제공되는 메시지 블록의 기본값 메시지 번호로 설정
THROW문에서 메시지 번호를 입력하는 경우 기본 카탈로그에서 2951부터 2999까지의 메시지 번호를 사용할 수 있다.
CREATE FUNCTION getUserType( IN DATA CHAR ) RETURNS CHAR BEGIN DECLARE USER_TYPE CHAR; SET USER_TYPE = SUBSTRING(SUBSTRING(DATA AFTER 'userType=') BEFORE '&'); IF(LENGTH(USER_TYPE) = 0 OR USER_TYPE IS NULL) THEN THROW USER EXCEPTION CATALOG 'BIPmsgs' MESSAGE 2951 VALUES('User Type is Null!'); END IF; RETURN USER_TYPE; END;
또한 ESQL 에는 데이터 처리를 위한 기본 내장함수들도 존재한다.
- 날짜
CURRENT_DATE
현재 날짜. 매개변수(X)CURRENT_TIME
현재 시간. 매개변수(X)CURRENT_TIMESTAMP
현재 날짜와 현지 시간을 표시하는 ISO8601 TIMESTAMP. 매개변수(X)EXTRACT
값에서 필드를 추출또는 계산하기위한 함수.
[ 리턴값 유형 ]
- 정수 (INTEGER)
YEAR, MONTH, DAY, HOUR, MINUTE, DAYS, DAYOFYEAR, DAYOFWEEK, MONTHS, QUARTEROFYEAR, QUARTERS, WEEKS, WEEKOFYEAR, WEEKOFMONTH - BOOLEAN
ISLEAPYEAR - 실수 (FLOAT)
SECOND
EXTRACT (YEAR FROM CURRENT_DATE); EXTRACT (HOUR FROM LOCAL_TIMEZONE); EXTRACT (DAYS FROM DATE '2000-02-29'); -- '0001-01-01' ~ '2000-02-29' 까지 일 수 EXTRACT (DAY FROM CURRENT_TIME); -- 실패 EXTRACT (DAYOFYEAR FROM CURRENT_DATE); -- 현재 년도 1월 1일 부터 현재까지의 일 수 EXTRACT (DAYOFYEAR FROM CURRENT_TIME); -- 실패- 정수 (INTEGER)
- 숫자
ABS, CEIL, FLOOR, MOD, RAND 및 SIN, COS 등 삼각함수 까지 다양한 숫자 함수를 제공한다. 이는 특별한 매개변수는 없어 설명은 생략한다. (공식홈페이지 참고)
-ROUND: 값을 주어진 자리 수까지 반올림하는 함수로 Rounding Mode 옵션을 다양하게 지정할 수 있다. 총 7 가지의 옵션 중 보편적인 세 가지만 살펴보면,- ROUND_HALF_EVEN (기본값)
양쪽 인접한 정수가 등거리가 아닌 경우 "가장 가까운 정수"를 향해서 반올림하며, 등거리인 경우에는 짝수를 향해 반올림합니다. 버려지는 소수의 왼쪽 숫자가 홀수인 경우 ROUND_HALF_UP처럼 작동하고, 짝수인 경우 ROUND_HALF_DOWN처럼 작동합니다. 이것은 일련의 계산을 반복적으로 적용할 때 누적 오류를 최소화하는 반올림 모드이며, 가끔 은행가 반올림이라고도 부릅니다. - ROUND_DOWN
0을 향해서 반올림합니다. 버려진 소수 앞의 숫자를 절대 증분시키지 않습니다(즉, 자릅니다). 이 반올림 모드에서는 계산된 값의 크기를 늘리지 않습니다. - ROUND_HALF_UP
양쪽 인접한 정수가 등거리가 아닌 경우 "가장 가까운 정수"를 향해서 반올림하며, 등거리인 경우에는 올림합니다. 버려지는 소수가 0.5 이상인 경우 ROUND_UP처럼 작동하고, 그렇지 않으면 ROUND_DOWN처럼 작동합니다. 이 반올림 모드가 학교에서 일반적으로 학습하는 반올림 모드입니다. - ROUND_HALF_DOWN
양쪽 인접한 정수가 등거리가 아닌 경우 "가장 가까운 정수"를 향해서 반올림하며, 등거리인 경우에는 내림합니다. 버려지는 소수가 0.5보다 큰 경우 ROUND_UP처럼 작동하고, 그렇지 않으면 ROUND_DOWN처럼 작동합니다.
- ROUND_HALF_EVEN (기본값)
- 문자열
기본적으로 자주 사용하는 문자열 함수들은 모두 지원한다.
CONTAINS, ENDSWITH, LEFT, LENGTH, LOWER 및 LCASE, LTRIM, OVERLAY, POSITION, REPLACE, REPLICATE, RIGHT, RTRIM, SPACE, STARTSWITH, SUBSTRING, TRANSLATE, TRIM, UPPER 및 UCASE
- LENGTH
LENGTH('Hello World!'); -- 12 LENGTH(''); -- 0 LENGTH(NULL); -- NULL - POSITION
POSITION은 모든 데이터 유형(BIT, BLOB, CHARACTER)의 두 번째 문자열(SourceExpression)에 있는 한 문자열의 위치(SearchExpression)를 제공하는 정수를 리턴하며 위치 1은 소스 문자열의 첫 번째 문자를 뜻한다. 검색 문자열을 찾을 수 없으면 결과 값이 0 이다.
-FROM: 검색 시작 위치 (기본은 1)
-REPEAT: 소스 문자열 내에서 검색 문자열의 N 번째 발생의 위치. 반복 수가 음수인 경우 문자열은 FROM절에서 제공된 위치 또는 문자열의 끝(FROM절이 없는 경우)에서 검색.
POSITION('Village' IN 'Hursley Village'); -- 9 POSITION('Town' IN 'Hursley Village'); -- 0 POSITION ('B' IN 'ABCABCABCABCABC'); -- 2 POSITION ('A' IN 'ABCABCABCABCABC' FROM 4); -- 4 POSITION ('C' IN 'ABCABCABCABCABC' REPEAT 4); -- 12 POSITION ('AB' IN 'ABCABCABCABCABC' FROM 2 REPEAT 3); -- 10 POSITION ('A' IN 'ABCABCABCABCABC' REPEAT -2); -- 10 POSITION ('BC' IN 'ABCABCABCABCABC' FROM 12 REPEAT -3); -- 5
- SUBSTRING
여러가지 매개변수 옵션을 지정하여 원하는 문자열을 추출하기 위한 함수.
-FROM 시작위치: 문자열 시작 위치 (기본은 1)
-BEFORE 문자열: FOR 가 없는 경우 시작부터 지정한 문자열의 첫 번째 발생 전까지, FOR 가 있는 경우 첫번째 발생지점 앞 N개의 문자열 리턴.
-AFTER 문자열: 지정한 문자열 다음 문자부터 FOR가 있는 경우 해당 길이 만큼, 아니면 문자열의 맨 마지막까지의 문자열 리턴.
-FOR 문자열길이: 추출할 문자열의 길이
SUBSTRING('Hello World!' FROM 7 FOR 4); -- 'Worl' SUBSTRING('Hello World!' BEFORE 'World'); -- 'Hello ' SUBSTRING('Hello World!' BEFORE 'World' FOR 3); -- 'lo ' SUBSTRING('Hello World!' BEFORE 'e'); -- 'H' SUBSTRING('Hello World!' AFTER 'World'); -- '!' SUBSTRING('Hello World!' AFTER 'W' FOR 2); -- 'or' SUBSTRING('Hello World!' AFTER 'P'); -- ''
- TRIM
문자열에서 후미 및 선두의 개개의 문자를 제거하는 문자열 조작 함수. 기본적으로는 지정한 문자열을 소스문자열에서 모두 제거한다.
-BOTH: 양끝
-LEADING: 왼쪽
-TRAILING: 오른쪽
TRIM(TRAILING 'b' FROM 'aaabBb'); -- 'aaabB' TRIM(' a '); -- 'a' TRIM(LEADING FROM ' a '); -- 'a ' TRIM('b' FROM 'bbbaaabbb'); -- 'aaa' TRIM( 'ste' FROM 'testmgktest'); -- 'mgk'
- LENGTH
참조 ) https://www.ibm.com/support/knowledgecenter/ko/SSMKHH_10.0.0/com.ibm.etools.mft.doc/ak04900_.htm
IBM Knowledge Center
Please note that DISQUS operates this forum. When you sign in to comment, IBM will provide your email, first name and last name to DISQUS. That information, along with your comments, will be governed by DISQUS’ privacy policy. By commenting, you are acce
www.ibm.com
반응형'ETC.' 카테고리의 다른 글
WebtoB & Jeus 버전 확인 명령어 (0) 2020.07.17 유니코드 Encoding/Decoding (0) 2020.05.27 [IBM] ESQL(Extended Structured Query Language) 개요 (0) 2020.05.21 [IBM] IBM Integration Bus 개요 (0) 2020.05.21