这是我的存储过程,用于检索表的所有列名。我想在另一个过程中调用该过程。
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
$$;
下面是调用上述过程并返回一个列名数组的主过程。但是我不明白我要去哪里错了。
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
$$
答案 0 :(得分:1)
我没有看到任何“大”错误……也许在调用get_columns('Table_Name')帮助后添加分号? (对我来说,这里也可以不用分号,因此我认为这不是问题)
最重要的是,最后$后面没有分号(也许脚本中稍后的代码会导致错误)
最后一个提示可能是对表的访问权限。
答案 1 :(得分:1)
您遇到的问题是您没有对结果集 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();