带有动态 SQL 语句错误的 Snowflake 存储过程
Snowflake Stored procedure with dynamic SQL statement Error
我在测试 sp 之后进行测试,Proc 正在抱怨 sql 命令
JavaScript compilation error: Uncaught SyntaxError: Unexpected string in TEST_PROC at ' var sqlCommand
我想在此过程中完成的是,运行 select 在 table 上准备更改语句并执行所有语句。
CREATE OR REPLACE PROCEDURE test_proc()
RETURNS STRING
LANGUAGE javascript
AS
$$
var sqlCommand = "select ''ALTER EXTERNAL TABLE''|| '' '' || SCHEMA_NAME ||''.'' || TABLE_NAME ||'' ''|| ''REFRESH'' ||'' ''''''|| LOCATION ||''''''''
from EXT_TABLE_CONGIG
where TABLE_NAME =''TABLEXYZ'';"
var stmt = snowflake.createStatement({ sqlText: sqlCommand } );
stmt.execute();
return 'success'
$$;```
您不能在 JavaScript 中使用双引号定义 multi-line 字符串。还有一个报价余额问题。
使用反引号 (backticks) 允许 multi-line 个字符串并使用单引号或双引号而无需将它们加倍。
CREATE OR REPLACE PROCEDURE test_proc()
RETURNS STRING
LANGUAGE javascript
AS
$$
var sqlCommand = `select 'ALTER EXTERNAL TABLE' || ' ' || SCHEMA_NAME || '.' || TABLE_NAME || ' ' || 'REFRESH' || '''' || LOCATION || ''''
from EXT_TABLE_CONGIG
where TABLE_NAME = 'TABLEXYZ';`
var stmt = snowflake.createStatement({ sqlText: sqlCommand } );
var rs = stmt.execute();
rs.next();
var sql = rs.getColumnValue(1);
stmt = snowflake.createStatement({ sqlText: sql });
stmt.execute();
return 'success';
$$;
call test_proc();
下面的例子是在程序中演示运行动态SQL -
@Greg 的回答已经在 java 脚本中找到了 multi-line。
CREATE OR REPLACE PROCEDURE test_proc()
RETURNS STRING
LANGUAGE javascript
AS
$$
var sqlCommand = "select 'alter table '||tname||' add (id number)' from t_name where tname in ('t1','t2','t3')";
var stmt = snowflake.createStatement({ sqlText: sqlCommand } );
var v_result = stmt.execute();
while(v_result.next()) {
var stmt1 = snowflake.createStatement({ sqlText: v_result.getColumnValue(1) } );
stmt1.execute();
var f_result = v_result.getColumnValue(1);
};
return 'success';
$$
;
还有refer-
通读 - “这是一个检索 ResultSet 并遍历它的示例:”
我在测试 sp 之后进行测试,Proc 正在抱怨 sql 命令
JavaScript compilation error: Uncaught SyntaxError: Unexpected string in TEST_PROC at ' var sqlCommand
我想在此过程中完成的是,运行 select 在 table 上准备更改语句并执行所有语句。
CREATE OR REPLACE PROCEDURE test_proc()
RETURNS STRING
LANGUAGE javascript
AS
$$
var sqlCommand = "select ''ALTER EXTERNAL TABLE''|| '' '' || SCHEMA_NAME ||''.'' || TABLE_NAME ||'' ''|| ''REFRESH'' ||'' ''''''|| LOCATION ||''''''''
from EXT_TABLE_CONGIG
where TABLE_NAME =''TABLEXYZ'';"
var stmt = snowflake.createStatement({ sqlText: sqlCommand } );
stmt.execute();
return 'success'
$$;```
您不能在 JavaScript 中使用双引号定义 multi-line 字符串。还有一个报价余额问题。
使用反引号 (backticks) 允许 multi-line 个字符串并使用单引号或双引号而无需将它们加倍。
CREATE OR REPLACE PROCEDURE test_proc()
RETURNS STRING
LANGUAGE javascript
AS
$$
var sqlCommand = `select 'ALTER EXTERNAL TABLE' || ' ' || SCHEMA_NAME || '.' || TABLE_NAME || ' ' || 'REFRESH' || '''' || LOCATION || ''''
from EXT_TABLE_CONGIG
where TABLE_NAME = 'TABLEXYZ';`
var stmt = snowflake.createStatement({ sqlText: sqlCommand } );
var rs = stmt.execute();
rs.next();
var sql = rs.getColumnValue(1);
stmt = snowflake.createStatement({ sqlText: sql });
stmt.execute();
return 'success';
$$;
call test_proc();
下面的例子是在程序中演示运行动态SQL - @Greg 的回答已经在 java 脚本中找到了 multi-line。
CREATE OR REPLACE PROCEDURE test_proc()
RETURNS STRING
LANGUAGE javascript
AS
$$
var sqlCommand = "select 'alter table '||tname||' add (id number)' from t_name where tname in ('t1','t2','t3')";
var stmt = snowflake.createStatement({ sqlText: sqlCommand } );
var v_result = stmt.execute();
while(v_result.next()) {
var stmt1 = snowflake.createStatement({ sqlText: v_result.getColumnValue(1) } );
stmt1.execute();
var f_result = v_result.getColumnValue(1);
};
return 'success';
$$
;
还有refer-
通读 - “这是一个检索 ResultSet 并遍历它的示例:”