【问题标题】:Retrieve the Variable value and insert into another table检索变量值并插入另一个表
【发布时间】:2026-01-08 12:00:02
【问题描述】:

我可以从下面的语句中检索 before(0) 和 after counts(4) 的值,但是当我从下面的代码中使用这些变量(load_cnt_beforeload_cnt_after)并引用它们时插入表中的值说它找不到变量(请参阅下面的错误)。如何使用这些值将它们插入到表中。

错误:存储过程 REC_COUNT_CHECK 中的执行错误:SQL 编译错误:第 1 行错误,位置 114 无效标识符 'LOAD_CNT_BEFORE' At Statement.execute,第 25 行位置 90

代码:

CREATE OR REPLACE PROCEDURE REC_COUNT_CHECK()       
RETURNS VARCHAR LANGUAGE JAVASCRIPT   
AS $$ 
 
    
    /***** Get the Record Count before Refresh ****/  
        var load_cnt=`SELECT Count(*) as record_cnt from "PLNG_ANALYSIS"."LOADDATA"."LOAD_VERIFICATION" WHERE EXTRACTDATE=Current_date()-1 ;`
        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()";    /***Refreshes data in table LOAD_VERIFICATION***/
        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 "PLNG_ANALYSIS"."HFM"."LOAD_VERIFICATION" WHERE EXTRACTDATE=Current_date() ;`
        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);
        
  /***** INSERT BEFORE AND AFTER COUNTS INTO LOG TABLE ****/     
         var insert_status_sp1=`INSERT INTO LOAD_STATUS_LOG_KK values (Current_TIMESTAMP(),1,'LOAD_VERIFICATION','Success','',**load_cnt_before,load_cnt_after**,1);`
            var exec_sp1_status = snowflake.createStatement({sqlText: insert_status_sp1}).execute();
            exec_sp1_status.next();
         
  
  return 'Success'
            
  $$;
  CALL REC_COUNT_CHECK();

【问题讨论】:

    标签: snowflake-cloud-data-platform snowflake-schema


    【解决方案1】:

    JS 变量应该被传递到 SQL 查询中。该机制称为Binding Variables

    var insert_status_sp1=`INSERT INTO LOAD_STATUS_LOG_KK values (Current_TIMESTAMP(),1,'LOAD_VERIFICATION','Success','',:1,:2,1);`
            
    var exec_sp1_status = snowflake.createStatement(
             {sqlText: insert_status_sp1,binds:[load_cnt_before,load_cnt_after]}
             ).execute();
    

    【讨论】:

    • 澄清上述解决方案。请注意,您定义的 load_cnt_before、load_cnt_after 变量位于 JavaScript 上下文中。绑定变量会将这些 JavaScript 变量传递到 SQL 上下文中。
    最近更新 更多