如何在雪花中的另一个过程中调用一个过程

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') 后添加分号有帮助? (对我来说,这里没有分号也能正常工作,所以我认为这不是问题所在)

最重要的是,最后 $$ 之后没有分号(可能是您脚本中后面的一些代码导致了错误)

可在此处找到其他信息https://docs.snowflake.com/en/sql-reference/stored-procedures-overview.html#stored-procedures-are-called-as-independent-statements

最后一个提示可能是对您的 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();