gpt4 book ai didi

javascript - 在雪花的 javascript 过程中传递值

转载 作者:行者123 更新时间:2023-12-02 22:28:43 24 4
gpt4 key购买 nike

Snowflake dwh 是否可以检索 SQL 查询结果并将其作为变量传递给同一过程中的下一个查询?

我正在尝试尝试 %ROWCOUNT, CURSOR 情况,但遇到了以下问题:

CREATE OR REPLACE PROCEDURE PASS_VAR_IN_JS()RETURNS VARCHARLANGUAGE javascript  AS    $$    var command = "SELECT * FROM TABLE WHERE ATTRIBUTE = 'Value'";    var stmt = snowflake.createStatement( {sqlText: command} );    var result1 = stmt.execute();    return result1.getColumnName(3); //this returns column name    var col_name = result1.getColumnName(3); //save column name to variable    //pass the column name to the query    var stmt = snowflake.createStatement({sqlText: "SELECT * FROM INFORMATION_SCHEMA WHERE COLUMN_NAME = ;", binds:[col_name]});    $$; 
UPDATE - working code that passes one result to another query
<pre>
CREATE OR REPLACE PROCEDURE szpotma_rowcount()
RETURNS VARCHAR(250)
LANGUAGE JAVASCRIPT
as
$$
var command = `SELECT ATTR1 FROM TABLE1 LIMIT 1`;
var stmt = snowflake.createStatement( {sqlText: command} );
var rs = stmt.execute(), col_name ;

if (rs.next()) {
col_name = rs.getColumnValue(1);
stmt = snowflake.createStatement({
sqlText: `SELECT STATUS FROM TABLE_STATUS WHERE ATTR1 = :1`, binds: [col_name]});

//view second query results
rs = stmt.execute();
rs.next()
return rs.getColumnValue(1);
}
$$

最佳答案

当然。

您只需:

  var command = `SELECT * FROM TABLE WHERE ATTRIBUTE = 'Value'`;
var stmt = snowflake.createStatement( {sqlText: command} );
var rs = stmt.execute(), col_name ;
if (rs.next()) {
col_name = rs.getColumnValue(3);

stmt = snowflake.createStatement({
sqlText: `SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = :1`,
binds: [col_name]
});
}

我列出了从结果集中提取数据的各种方法:
How to use Show Command in Stored Procedures - Not working

[从上面复制]:

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

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

关于javascript - 在雪花的 javascript 过程中传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58978489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com