【问题标题】:Snowflake stored procedure parameter problem雪花存储过程参数问题
【发布时间】:2022-01-05 13:27:48
【问题描述】:

我想记录存储过程中发生的错误:

catch (ERROR)  {
      snowflake.execute({sqlText: sql_update_log_command, binds: [RUN_ID, PROCESS_ID,'error', 0, ERROR.message] });
        return "Failed: " + ERROR.message;
    }

sql_update_log_command 执行过程“update_process_log”并绑定这 5 个参数。但是,当错误发生时,应该包含错误消息的列保持为空。 错误是这样的:

“失败:无法识别数值‘$METADATA$FILE_ROW_NUMBER’ 文件 'data/stage/20220104/user_activity/20220104-172435475.csv.gz',第 2 行,字符 1 第 1 行,$METADATA$FILE_ROW_NUMBER 列 如果您想在遇到错误时继续加载,请为 ON_ERROR 选项使用其他值,例如“SKIP_FILE”或“CONTINUE”。有关加载选项的更多信息,请在 SQL 客户端中运行 'info loading_data'。"

过程“update_process_log”签名:

create or replace procedure metadata.update_process_log(
    RUN_ID FLOAT, 
    PROCESS_ID FLOAT, 
    PROCESS_STATUS VARCHAR,
    NUM_OF_RECORDS FLOAT,
    ERROR_MSG VARCHAR)
returns string
  language javascript

看起来美元符号 $ 有问题吗?怎么处理?

【问题讨论】:

  • 如果你使用会发生什么:snowflake.execute({sqlText: 'call metadata.update_process_log(:1, :2, :3, :4, :5)', binds: [RUN_ID, PROCESS_ID,'error', 0, ERROR.message] });

标签: javascript stored-procedures snowflake-cloud-data-platform


【解决方案1】:

我在这个问题中找到了解决方案 - Snowflake working with stored procedure on error handling

基本上你必须在记录行之前转义单引号:

err.message.replace( /'/g , "''" )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-13
    • 2022-11-12
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 2022-10-15
    • 2021-10-01
    • 2021-06-22
    相关资源
    最近更新 更多