【问题标题】:How to use Show Command in Stored Procedures - Not working如何在存储过程中使用 Show 命令 - 不工作
【发布时间】:2020-03-08 08:14:42
【问题描述】:

关注沼泽帖子https://community.snowflake.com/s/article/How-to-USE-SHOW-COMMANDS-in-Stored-Procedures

我得到的结果是 NaN,这是有道理的,因为在这篇博客文章中返回值设置为浮动。

我尝试将返回值设置为 varchar、string 等,但我得到了不同的结果,例如 Object 对象等。

创建或替换过程商店(CMD VARCHAR) 返回浮动不为空 语言 JAVASCRIPT 作为调用者执行 作为$$ var stmt = 雪花.createStatement( { sqlText:${CMD} } );

var res = stmt.execute(); 返回资源 $$ ;

预期返回的是表格列表,实际结果是NaN。

【问题讨论】:

    标签: snowflake-cloud-data-platform


    【解决方案1】:

    stmt.execute() 调用返回一个ResultSet 对象,当转换为FLOAT 时,该对象将变为NaN。您需要使用ResultSet 对象来提取查询返回的数据。
    还要记住 JavaScript 中的变量引用是普通的,即。 CMD.

    PROCEDURE 返回类型 FLOAT 将不起作用,如果您想要“预期返回是一个表列表”,不管那是什么。我怀疑你想要ARRAY 或完全灵活的VARIANT。两者都适用于以下内容:

    $$
      var stmt = snowflake.createStatement( { sqlText: CMD } );
      var rs = stmt.execute();
      var result = [];
      while (rs.next())
        result.push(rs.getColumnValue(1));
      return result;
    $$;
    

    详情请查看Stored Procedures API 文档。

    如果你有多个列,代码会稍微复杂一些:

      var result = [], row, col;
      while (rs.next()) {
        row = [];
        for (col = 1; col <= stmt.columnCount; col++)
          row.push(rs.getColumnValue(col));
        result.push(row);
      }
    

    核心 JavaScript 程序员可能会将其压缩为:

    var result = [], cols = Array.from({ length: stmt.columnCount }, (v, i) => i + 1);
    while (rs.next()) result.push(cols.map(c => rs.getColumnValue(c)));
    

    最后一个变体,其中第一个结果行包含列名,随后的行包含结果集中的数据,可通过 result[row][column] 访问:

    var result =
        [ Array.from({ length: stmt.columnCount }, (v, i) => stmt.getColumnName(i + 1)) ];
    while (rs.next()) result.push(result[0].map(cn => rs.getColumnValue(cn)));
    

    【讨论】:

      猜你喜欢
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 1970-01-01
      • 2018-06-24
      相关资源
      最近更新 更多