遍历存储过程中的字段名称数组返回在语句执行时未找到该数组

Looping over an array of field names in a stored procedure is returning that the array is not found on statement execution

我有以下JavaScript程序:

CREATE PROCEDURE ADD_OBSERVATION_VALUES()
RETURNS string
LANGUAGE JAVASCRIPT
AS
$$
    arr = [];
    // Get number of rows
    //var query = "SELECT COUNT(*) FROM @ingest_stg/load (file_format => 'csv_format', pattern => '.*[.]csv.gz') t";
    var query = "SELECT * FROM IYCF_TEMP";
    var stmt = snowflake.createStatement( {sqlText: query} );
    var rows_result = stmt.execute(); 
    // rows_result.next();
    // num_rows = rows_result.getColumnValue(1);
    var row_num = 1;
    var record_source = 'ONA'
    // Set the indicators
    COLUMN_FIELD_NAMES = ['beneficiary',
                'nbr_1st_cons_6mc_iycfc number',
                'followup_2nd_time_6mc_iycfc'];
    while(rows_result.next()){
        for (var col_num = 0; col_num<COLUMN_FIELD_NAMES.length; col_num = col_num+1){
            var col_name = COLUMN_FIELD_NAMES[col_num];
            var query = "INSERT INTO LINK_OBSERVATION_FIELD(FIELD_NAME_OBSERVATION_HASH_KEY, LOAD_DT, RECORD_SRC, OBSERVATION_DATE_LOCATION_HASH_KEY, INDICATOR_HASH_KEY)"
                query += "VALUES (md5(concat(COLUMN_FIELD_NAMES[col_num], rows_result['date'])), current_timestamp(), record_source, md5(rows_result['date']), md5(COLUMN_FIELD_NAMES[col_num]))";
            var stmt = snowflake.createStatement( {sqlText: query} );
            if(stmt.execute()){
                var query = "INSERT INTO SAT_FIELD_VALUES(OBSERVATION_FIELD_HASH_KEY, LOAD_DT, LOAD_END_DT, record_src, FIELD_VALUE, REVIEW_STATUS, SUBMISSION_DT, FIELD_NAME_OBSERVATION_HASH_KEY)"
                    query += "VALUES (md5(md5(concat(rows_result[col_name], rows_result['date']))),current_timestamp(), NULL, record_source, rows_result[col_name], 'PENDING', rows_result['_submission_time'], md5(concat(rows_result[col_name], rows_result['date'])))";
                var stmt = snowflake.createStatement( {sqlText: query });
                stmt.execute()
            }
        }
    }
    return "DONE"
    
$$;

它将遍历调查的特定字段名称,将它们添加到 Snowflake 上的特定表中并进行一些更改。

我不断收到以下错误:

Execution error in store procedure ADD_OBSERVATION_VALUES: SQL compilation error: error line 1 at position 163 invalid identifier 'COLUMN_FIELD_NAMES' At Statement.execute, line 33 position 20

COLUMN_FIELD_NAMES好像是JS中定义的变量:

    // Set the indicators
    COLUMN_FIELD_NAMES = ['beneficiary', ...

但是随后代码在构建查询时将其用作文字字符串:

query += "VALUES (md5(concat(COLUMN_FIELD_NAMES[col_num], ...

相反,它应该被解析并与 JavaScript 连接,如:

query += "VALUES (md5(concat(" + COLUMN_FIELD_NAMES[col_num] +", ...

如果执行查询不起作用,请尝试打印值而不是执行它,然后进行调试。