EVAL문은 문자 값을 취하여 SQL문으로 해석하고 실행합니다.
EVAL 함수(여기서도 설명됨)는 문자 값을 사용하지만 값을 리턴하는 ESQL 표현식으로 해석합니다.
EVAL은 표현식의 형식으로 하나의 매개변수를 취하고 이 표현식을 평가하고 결과 값이 아직 1이 아닌 경우 문자열로 캐스트합니다. 따라서 EVAL에 전달된 표현식은 문자열로 표현할 수 있어야 합니다.
다음의 예에서 A와 B는 정수 스칼라 변수이며 scalarVar1과 OperatorAsString은 문자열 스칼라 변수입니다.
표현식 A+B는 정수 값을 리턴해도 정수 값은 문자열로 표현할 수 있으므로 EVAL이 평가의 두 번째 단계를 계속하기 전에 필요한 캐스트가 수행되기 때문에 승인할 수 있습니다.
EVAL이 ESQL문 대신 사용되고 있는 경우 첫 번째 단계 평가는 종료 세미콜론을 포함하여 올바른 ESQL문을 나타내는 문자열을 리턴하게 되므로 마지막 문자열 리터럴의 끝에 포함된 세미콜론이 필요합니다.
EVAL문 내에서 선언된 변수는 이 EVAL문 외부에 존재하지 않습니다. 이런 측면에서 EVAL은 함수와 비슷하여 로컬로 선언된 변수는 로컬일 뿐이며 함수가 종료될 때 범위에서 벗어납니다.
EVAL의 실제 힘은 ESQL문이나 표현식을 동적으로 구성할 수 있도록 한다는 것입니다. 위의 두 번째 및 세 번째 예에서 scalarVar1 또는 operatorAsString은 수신되는 메시지 필드의 값이나 다른 동적 값에 따라 설정할 수 있으므로 잠재적으로 길이가 긴 IF THEN 방법을 요구하지 않고 실행되는 ESQL을 효과적으로 제어할 수 있습니다.
그러나 EVAL을 사용할 때 성능 영향을 고려해야 합니다. 명령문 또는 표현식의 동적 구성 및 실행은 간단하게 사전 구성된 것을 실행하는 것보다 분명히 시간 소모적입니다. 성능이 중요한 경우 보다 특정하지만 보다 빠른 ESQL을 작성하는 것보다 나음을 알 수 있을 것입니다.
이 예에서 EVAL은 표현식이 아닌 필드 참조를 바꾸는 데 사용됩니다.
이 예에서 EVAL로 전달된 (SELECT T.x FROM Database.y)는 문자열로 표현할 수 없는 목록을 리턴합니다.
SET OutputRoot.XML.Data.Result[] = EVAL('(SELECT T.x FROM Database.y AS T)');