SQL snowflake 上的存储过程将绑定列视为字符串,并且未从 table 中获取其值

SQL Stored procedure on snowflake is treating binded column as string and its not getting its value from the table

我正在执行循环特定字段名称的过程,原因有两个:

  1. 我想使用 md5 对字段名称本身进行哈希处理(我们正在使用数据保险库);
  2. 我想将每个字段名称值添加为 table 中的一行。

我有以下完美运行的程序:

CREATE PROCEDURE ADD_OBSERVATION_VALUES()
RETURNS string
LANGUAGE JAVASCRIPT
EXECUTE AS CALLER
AS
$$
    arr = [];
    var row_num = 1;
    // Set the indicators
    COLUMN_FIELD_NAMES = ["care_beneficiary", "cg_child_6mo_receiv_ind_iycf_nbr_1st_cons_6mc_iycfc number",
    "preg_women_rec_ind_counselling_nbr_1st_cons_pregw_iycfc",
    ...
    ];
    
    COLUMN_FIELD_NAMES_TO_HASH = [
    "cg_child_6mo_receiv_ind_iycf/nbr_1st_cons_6mc_iycfc",
    "cg_child_6mo_receiv_ind_iycf/nbr_followup_2nd_time_6mc_iycfc",
    ...
    ];
    try{
//      while(rows_result.next()){
          for (var col_num = 0; col_num<COLUMN_FIELD_NAMES_TO_HASH.length; col_num = col_num+1){
              var COL_NAME = COLUMN_FIELD_NAMES_TO_HASH[col_num];
              var query = "INSERT INTO LINK_OBSERVATION_FIELD SELECT (SELECT md5(concat(?, concat('CAMP', concat(CAMPNO, DATE))))), current_timestamp(), (SELECT 'ONA'), (SELECT (md5(concat(DATE, concat('CAMP', CAMPNO))))), md5(?) FROM IYCF_TEMP";
              var stmt = snowflake.createStatement( {sqlText: query, binds:[COL_NAME, COL_NAME]} );
              if(stmt.execute()){
//                  var query = "INSERT INTO SAT_FIELD_VALUES SELECT (SELECT (md5(md5(concat(?, concat('CAMP', concat(CAMPNO, DATE))))))), current_timestamp(), NULL, (SELECT 'ONA'), ?, (SELECT 'PENDING'), (SELECT _SUBMISSION_TIME), (SELECT md5(concat(?, concat('CAMP', concat(CAMPNO, DATE))))) FROM IYCF_TEMP";
//                  var stmt = snowflake.createStatement( {sqlText: query, binds: [COL_NAME, COL_NAME, COL_NAME] });
//                  stmt.execute()
              }
          }
//      }
      return "DONE"
    }
    catch(error){
        return error
    }
    
$$;

第一个插入查询工作正常,成功执行后转到第二个插入查询时,出现以下错误:

Numeric value 'care_beneficiary' is not recognized

我猜测错误来自以下插入查询的 , ?,

INSERT INTO SAT_FIELD_VALUES SELECT (SELECT (md5(md5(concat(?, concat('CAMP', concat(CAMPNO, DATE))))))), current_timestamp(), NULL, (SELECT 'ONA'), ?, (SELECT 'PENDING'), (SELECT _SUBMISSION_TIME), (SELECT md5(concat(?, concat('CAMP', concat(CAMPNO, DATE))))) FROM IYCF_TEMP;

CONCATS 中的 ? 工作正常,但独立字段 , ?, 。在这个独立的绑定字段中,我想从 table 而不是它的名称中获取它的值,我假设这是因为该字段被读取为带引号,并且查询正在考虑它不应该的字符串被添加到数字字段。

知道如何删除引号或让查询将其视为字段名称而不是值吗?

解决方案如 Felipe 在问题的评论部分中提到的那样,使用字符串和变量绑定和组合查询:

var query = "SELECT ... " + COL_NAME + "FROM ..."

显然 IDENTIFIER(COL_NAME) 对我不起作用,但我相信如果我知道在哪里使用绑定,它就会起作用。