如何在雪花中的另一个过程中调用一个过程
How to call a procedure inside another procedure in snowflake
这是我的存储过程,它检索 table 的所有列名。我想在另一个过程中调用这个过程。
CREATE OR REPLACE PROCEDURE get_columns(TABLE_NAME VARCHAR)
RETURNS ARRAY
LANGUAGE JAVASCRIPT
AS
$$
var stmt = snowflake.createStatement({
sqlText: "SELECT * FROM " + TABLE_NAME + " LIMIT 1;",
});
stmt.execute();
var cols=[];
for (i = 1; i <= stmt.getColumnCount(); i++) {
cols.push(stmt.getColumnName(i));
}
return cols
$$;
下面是调用上述过程的主过程和 return 列名数组。但是我不明白我哪里错了。
CREATE OR REPLACE PROCEDURE get_data() //procedure call the above procedure
RETURNS ARRAY
LANGUAGE JAVASCRIPT
AS
$$
var arr = [];
var r = snowflake.createStatement({sqlText: "call get_columns('Table_Name')"});
arr = r.execute(); //r.execute() returns an array
return arr; //getting an error
$$
我没有看到任何“大”错误...也许在调用 get_columns('Table_Name') 后添加分号有帮助? (对我来说,这里没有分号也能正常工作,所以我认为这不是问题所在)
最重要的是,最后 $$ 之后没有分号(可能是您脚本中后面的一些代码导致了错误)
最后一个提示可能是对您的 table.
的访问权限
你的问题是你没有迭代结果集arr。您可以在代码中执行以下操作:
CREATE OR REPLACE PROCEDURE get_data() //procedure call the above procedure
RETURNS ARRAY
LANGUAGE JAVASCRIPT
AS
$$
var arr = [];
var r = snowflake.createStatement({sqlText: "call get_columns('TABLE_NAME')"});
arr = r.execute();
arr.next();
return arr.getColumnValue(1);
$$;
call get_data();
这是我的存储过程,它检索 table 的所有列名。我想在另一个过程中调用这个过程。
CREATE OR REPLACE PROCEDURE get_columns(TABLE_NAME VARCHAR)
RETURNS ARRAY
LANGUAGE JAVASCRIPT
AS
$$
var stmt = snowflake.createStatement({
sqlText: "SELECT * FROM " + TABLE_NAME + " LIMIT 1;",
});
stmt.execute();
var cols=[];
for (i = 1; i <= stmt.getColumnCount(); i++) {
cols.push(stmt.getColumnName(i));
}
return cols
$$;
下面是调用上述过程的主过程和 return 列名数组。但是我不明白我哪里错了。
CREATE OR REPLACE PROCEDURE get_data() //procedure call the above procedure
RETURNS ARRAY
LANGUAGE JAVASCRIPT
AS
$$
var arr = [];
var r = snowflake.createStatement({sqlText: "call get_columns('Table_Name')"});
arr = r.execute(); //r.execute() returns an array
return arr; //getting an error
$$
我没有看到任何“大”错误...也许在调用 get_columns('Table_Name') 后添加分号有帮助? (对我来说,这里没有分号也能正常工作,所以我认为这不是问题所在)
最重要的是,最后 $$ 之后没有分号(可能是您脚本中后面的一些代码导致了错误)
最后一个提示可能是对您的 table.
的访问权限你的问题是你没有迭代结果集arr。您可以在代码中执行以下操作:
CREATE OR REPLACE PROCEDURE get_data() //procedure call the above procedure
RETURNS ARRAY
LANGUAGE JAVASCRIPT
AS
$$
var arr = [];
var r = snowflake.createStatement({sqlText: "call get_columns('TABLE_NAME')"});
arr = r.execute();
arr.next();
return arr.getColumnValue(1);
$$;
call get_data();