我有下面的 SP,只要 SP - CALL LOAD_VERIFICATION_TEST() 没有任何错误,它就可以正常执行(我将定义更新为有语法错误,以便它可以在 CATCH 块中捕获并发布实际的错误消息)。有趣的是它说变量“variance_calc”也没有找到。如果我通过更正语法错误来更新定义,它执行得很好,但我的意图是捕捉该错误并将其发布到日志表。
下面的代码:
CREATE OR REPLACE PROCEDURE TEST_SP()
RETURNS VARCHAR LANGUAGE JAVASCRIPT
AS $$ {
try {
/***** Get the Record Count before Refresh ****/
var load_cnt=`SELECT Count(*) as record_cnt from "FINANCE_PLNG_ANALYSIS"."HFM"."LOAD_VERIFICATION" ;`
var load_cnt_check = snowflake.createStatement({sqlText: load_cnt}).execute();
load_cnt_check.next();
load_cnt_before = load_cnt_check.getColumnValue(1);
/***** Execute the SP ****/
var sp_call = "CALL LOAD_VERIFICATION_TEST()";
var result = snowflake.execute({sqlText: sp_call});
result.next();
var return_msg2 = result.getColumnValue(1);
/***** Check the After Refresh Count ****/
var load_cnt_after=`SELECT Count(*) as record_cnt from "FINANCE_PLNG_ANALYSIS"."HFM"."LOAD_VERIFICATION" ;`
var load_cnt_check_after = snowflake.createStatement({sqlText: load_cnt_after}).execute();
load_cnt_check_after.next();
load_cnt_after= load_cnt_check_after.getColumnValue(1);
/***** Calculating Variance ****/
var variance_temp=`SELECT (div0(?,?)*100)`;
var variance_temp_status = snowflake.createStatement({sqlText:variance_temp,binds:[(load_cnt_after-load_cnt_before),load_cnt_before]}).execute();
variance_temp_status.next();
variance_calc= variance_temp_status.getColumnValue(1);
var insert_status_sp1=`INSERT INTO LOAD_STATUS_LOG values (Current_TIMESTAMP(),1,'LET_CDW_LOAD_VERIFICATION','Success','',:1,:2,:3);`
var exec_sp1_status = snowflake.createStatement({sqlText: insert_status_sp1,binds:[load_cnt_before,load_cnt_after,variance_calc]}).execute();
exec_sp1_status.next();
}
catch (err) {
return_msg2 =err;
if (return_msg2!='Success') {
var insert_status_sp1=`INSERT INTO LOAD_STATUS_LOG values (Current_TIMESTAMP(),1,'LET_CDW_LOAD_VERIFICATION','Failed','Failed',:1,:2,:3);`
var exec_sp1_status = snowflake.createStatement({sqlText: insert_status_sp1,binds:[load_cnt_before,load_cnt_after,variance_calc]}).execute();
exec_sp1_status.next();
}
}
}
return return_msg2
$$;
CALL TEST_SP(); [![Success condition without any SP error][1]][1]