如何在存储过程中使用显示命令 - 不工作

How to use Show Command in Stored Procedures - Not working

跟随沼泽 post https://community.snowflake.com/s/article/How-to-USE-SHOW-COMMANDS-in-Stored-Procedures

我得到的结果是 NaN,这是有道理的,因为 return 值在此博客 Post 中设置为浮动。

我已经尝试将 return 值设置为 varchar、string 等,但我得到了不同的结果,例如 Object object 等

创建或替换程序商店(CMD VARCHAR) returns 浮动不为空 语言 JAVASCRIPT 作为调用者执行 作为$$ 变量 stmt = snowflake.createStatement( { sql文本:${CMD} } );

var res = stmt.execute(); return 水库 $$ ;

预期return是一个表列表,实际结果是NaN。

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

PROCEDURE return 类型 FLOAT 将无法工作,如果你想要 "The expected return is a list of tables",无论如何。我怀疑您想要 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)));

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

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)));