如何在存储过程中使用显示命令 - 不工作
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)));
跟随沼泽 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)));