在存储过程中打印雪花查询

lea*_*tle 6 snowflake-cloud-data-platform

我正在尝试使用 Snowflake 存储过程,并希望将下面存储过程中的 SQL 语句打印到屏幕上。

CREATE OR REPLACE PROCEDURE read_western_provinces()
  RETURNS VARCHAR NOT NULL
  LANGUAGE JAVASCRIPT
  AS
  $$
  var return_value = "";
  try {
      var command = "SELECT * FROM western_provinces ORDER BY province;"
      var stmt = snowflake.createStatement( {sqlText: command } );
      var rs = stmt.execute();
      if (rs.next())  {
          return_value += rs.getColumnValue(1);
          return_value += ", " + rs.getColumnValue(2);
          }
      while (rs.next())  {
          return_value += "\n";
          return_value += rs.getColumnValue(1);
          return_value += ", " + rs.getColumnValue(2);
          }
      }
  catch (err)  {
      result =  "Failed: Code: " + err.code + "\n  State: " + err.state;
      result += "\n  Message: " + err.message;
      result += "\nStack Trace:\n" + err.stackTraceTxt;
      }
  return return_value;
  $$
  ;
Run Code Online (Sandbox Code Playgroud)

每当执行存储过程时,如何将命令变量(包含 SQL)的值打印到屏幕上?

谢谢

Dav*_*son 5

我还没有找到一种方法来做到这一点,但至少有一些选择可以接近。

  1. 您可以将输出插入到表中。
  2. 您可以返回一个变体,而不是使用数组或类似的调试输出

    return { "output":return_value, "debug":result }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用一个过程来复制类似的东西。请参阅雪花社区的类似帖子:https://community.snowflake.com/s/question/0D50Z00009Uu3cTSAR/debugging-procedures-technicques-print-std-out-etc