雪花存储过程抛出意外的令牌错误
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 执行”以便能够访问会话变量。我建议您定义参数而不是访问会话变量。
我已经按照 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 执行”以便能够访问会话变量。我建议您定义参数而不是访问会话变量。