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