@GETVAL
@GETVAL 함수를 사용하여 MAP 또는 TABLE 문의 FILTER 또는 COLMAP 절에 대한 입력으로 사용할 수 있도록 내장 프로시저 또는 질의에서 값을 추출합니다.
@GETVAL를 사용하여 <parameter> 값을 추출할 수 있는지 여부는 다음에 따라 달라집니다.
-
내장 프로시저 또는 질의가 성공적으로 실행되었는지 여부입니다.
-
내장 프로시저 또는 질의 결과가 만료되었는지 여부입니다.
값을 추출할 수 없는 경우 @GETVAL 함수는 "열 누락" 조건을 생성합니다. 일반적으로 이 문제는 데이터베이스에서 변경된 열의 값만 기록하는 경우 갱신 작업에 대해 발생합니다.
일반적으로 이는 열을 매핑할 수 없음을 의미합니다. 누락된 열 값을 테스트하려면 @COLTEST 함수를 사용하여 @GETVAL의 결과를 테스트한 다음 원하는 경우 열의 대체 값을 매핑하여 누락된 값을 보상합니다. 또는 열 값을 사용할 수 있도록 하기 위해 TABLE 또는 MAP 매개변수의 FETCHCOLS 또는 FETCHCOLSEXCEPT 옵션을 사용하여 로그에 없는 경우 데이터베이스에서 값을 인출할 수 있습니다. 또한 필요한 열에 대해 보완 로깅을 활성화하면
구문
@GETVAL (<name>.<parameter>)
<name>
내장 프로시저 또는 질의의 <name>입니다. SQLEXEC를 사용하여 프로시저 또는 질의를 실행할 때 적합한 값은 다음과 같습니다.
질의의 경우 SQLEXEC 절의 ID 옵션으로 지정된 논리적 이름을 사용합니다. ID은 질의에 필요한 SQLEXEC 인수입니다.
내장 프로시저의 경우 TABLE 또는 MAP 문 내에서 프로시저가 실행되는 횟수에 따라 다음 중 하나를 사용합니다.
-
다중 실행의 경우
SQLEXEC문의ID절에 정의된 논리적 이름을 사용합니다. 프로시저를 여러 번 실행하려면ID가 필요합니다. -
단일 실행의 경우 실제 내장 프로시저 이름을 사용합니다.
<parameter>
유효한 값은 다음 중 하나입니다.
-
데이터가 추출되어 열 맵으로 전달되는 내장 프로시저 또는 질의의 매개변수 이름입니다.
-
RETURN_VALUE- 내장 프로시저 또는 질의에서 반환된 값을 추출하는 경우
대체 구문
SQLEXEC를 사용할 경우 @GETVAL 키워드를 명시적으로 사용하지 않고도 매개변수 결과를 캡처할 수 있습니다. 프로시저 이름(또는 query를 사용하거나 프로시저의 여러 Instance를 사용하는 경우 논리적 이름) 및 파라미터를 다음 형식으로 참조하면 됩니다.
{<procedure_name> | <logical_name>}.<parameter>
예, 표준 구문
예 1
다음은 각 map 문이 @GETVAL 함수 내에서 논리적 이름 lookup1 및 lookup2를 참조하고 각 결과 집합을 적절하게 참조하여 내장 프로시저 lookup를 호출할 수 있도록 합니다.
MAP schema.srctab, TARGET schema.targtab,
SQLEXEC (SPNAME lookup, ID lookup1, PARAMS (param1 = srccol)),
COLMAP (targcol1 = @GETVAL (lookup1.param2));
MAP schema.srctab, TARGET schema.targtab2,
SQLEXEC (SPNAME lookup, ID lookup2, PARAMS (param1 = srccol)),
COLMAP (targcol2= @GETVAL (lookup2.param2));
예 2
다음은 내장 프로시저 lookup의 단일 실행을 보여줍니다. 이 경우 프로시저의 실제 이름이 사용됩니다. 논리적 이름은 필요하지 않습니다.
MAP schema.tab1, TARGET schema.tab2,
SQLEXEC (SPNAME lookup, PARAMS (param1 = srccol)),
COLMAP (targcol = @GETVAL (lookup.param1));
예 3
다음은 값이 @GETVAL로 매핑되는 질의 실행을 보여줍니다.
MAP sales.account, TARGET sales.newacct,
SQLEXEC (ID lookup,
QUERY ' select desc_col into desc_param from lookup_table '
' where code_col = :code_param ',
PARAMS (code_param = account_code)),
COLMAP (newacct_id = account_id, newacct_val = @GETVAL (lookup.desc_param));
예, 대체 구문
예 1
다음 예에서 @GETVAL는 @GETVAL 키워드 없이 proc1.p2 구문에 대해 암시적으로 호출됩니다.
MAP test.tab1, TARGET test.tab2,
SQLEXEC (SPNAME proc1, ID myproc, PARAMS (p1 = sourcecol1)),
COLMAP (targcol1 = proc1.p2);
예 2
다음 예에서 @GETVAL 함수는 @GETVAL 키워드 없이 lookup.desc_param 구문에 대해 암시적으로 호출됩니다.
MAP sales.account, TARGET sales.newacct,
SQLEXEC (ID lookup,
QUERY ' select desc_col into desc_param from lookup_table '
' where code_col = :code_param ',
PARAMS (code_param = account_code)),
COLMAP (newacct_id = account_id, newacct_val = lookup.desc_param);