雪花存储过程抛出意外的令牌错误

snowflake stored procedure is throwing unexpected Token error

我已经按照 snowflake 文档编写了一个过程来生成 'SET' 语句列表并在 Snowflake 中执行它们。调用过程时出现意外标识符错误。有人可以帮我解决这个问题吗?

create or replace procedure SET_ENV()
    returns string
    language JavaScript
    as
    $$
    MASTER_QUERY = {sqlText: SELECT ('SET '||TABLE_NAME||'= 
    CONCAT($Database_pre,'||'''.'''||',$Schema_pre,'||'''.'''||','''||TABLE_NAME||''');') AS 
 QUERY
 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'
 AND( TABLE_NAME NOT LIKE 'TMP_%' AND TABLE_NAME NOT LIKE '%WRK_%')};
    STATEMENT = snowflake.createStatement(MASTER_QUERY);

  rs = STATEMENT.execute();



  var s = '';
  while (rs.next())  {
  
      EXECUTION_QUERY = {sqlText: rs.getColumnValue("QUERY")};
      stmtEx = snowflake.createStatement(EXECUTION_QUERY);
      stmtEx.execute();
      s += rs.getColumnValue(1) + "\n";
      }
       
  return s;
  
  $$

;

 CALL SET_ENV() 

我得到的错误如下。

JavaScript 编译错误:未捕获的语法错误:SET_ENV 中的意外标识符位于 'MASTER_QUERY = {sqlText: 'SELECT ('SET '||TABLE_NAME||'='位置35

在添加反引号 (`) 字符以包含 SQL 命令后,我能够 运行 它:

create or replace procedure SET_ENV()
    returns string
    language JavaScript
    execute as CALLER
    as
    $$
    MASTER_QUERY = {sqlText: `SELECT ('SET '||TABLE_NAME||'= 
    CONCAT($Database_pre,'||'''.'''||',$Schema_pre,'||'''.'''||','''||TABLE_NAME||''');') AS 
 QUERY  
 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'
 AND( TABLE_NAME NOT LIKE 'TMP_%' AND TABLE_NAME NOT LIKE '%WRK_%')` };
    STATEMENT = snowflake.createStatement(MASTER_QUERY);

  rs = STATEMENT.execute();


  var s = '';
  while (rs.next())  {
  
      EXECUTION_QUERY = {sqlText: rs.getColumnValue("QUERY")};
      stmtEx = snowflake.createStatement(EXECUTION_QUERY);
      stmtEx.execute();
      s += rs.getColumnValue(1) + "\n";
      }
       
  return s;
  
  $$;

set DATABASE_PRE='DBPRE';
set Schema_pre = 'SCHPRE';

call SET_ENV();

重要:您还应该将过程定义为“作为 CALLER 执行”以便能够访问会话变量。我建议您定义参数而不是访问会话变量。