首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >雪花上的SQL存储过程将绑定的列视为字符串,并且它没有从表中获取它的值。

雪花上的SQL存储过程将绑定的列视为字符串,并且它没有从表中获取它的值。
EN

Stack Overflow用户
提问于 2021-01-08 08:50:57
回答 1查看 390关注 0票数 0

由于两个原因,我正在做一个循环处理特定字段名的过程:

  1. 我想使用md5 (我们正在使用数据库)对字段名本身进行散列;
  2. ,我想将每个字段名值作为一行添加到表中。

我有以下程序,运作得很好:

代码语言:javascript
复制
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
    }
    
$$;

第一个insert查询运行良好,在成功执行后转到第二个insert查询时,我得到以下错误:

数字值“care_beneficiary”未被识别

我猜想该错误来自以下insert查询的, ?,

代码语言:javascript
复制
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中的?运行良好,但独立字段, ?,运行良好。在这个独立绑定的字段中,我希望从表中获得它的值,而不是它的名称,而且我假设这是因为该字段是用引号读取的,而且查询考虑的是不应该添加到数字字段的字符串。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-11 07:40:38

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

代码语言:javascript
复制
var query = "SELECT ... " + COL_NAME + "FROM ..."

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65625913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档