0

我有下面的 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]
4

0 回答 0