CREATE OR REPLACE PROCEDURE DEPARTMENT_STORED_PROC(table_name VARCHAR)
returns variant not null
language javascript
as
$$
var sql_cmd_ingest = "copy into DEPARTMENT.CLASSES." + TABLE_NAME + "from '@DEPARTMENT.CLASSES.CLASSES_PREPROD_STAGE/" + TABLE_NAME + "';";
snowflake.execute({sqlText: sql_cmd_ingest} );
$$
以上只是一个代码段。 '@DEPARTMENT.CLASSES.CLASSES_PREPROD_STAGE/"
Execution error in store procedure DEPARTMENT_STORED_PROC: SQL compilation error: syntax error line 1 at position 70 unexpected ''@DEPARTMENT.CLASSES.CLASSES_PREPROD_STAGE/CLASSES_TABLE''. At Snowflake.execute, line 11 position 10
答案 0 :(得分:2)
您需要在TABLE_NAME之后和“ from”之前添加一个空格
var sql_cmd_ingest = "copy into DEPARTMENT.CLASSES." + TABLE_NAME + " from '@DEPARTMENT.CLASSES.CLASSES_PREPROD_STAGE/" + TABLE_NAME + "';";
我还强烈建议在存储过程中构建SQL语句时使用JavaScript替换变量。您可以使用三种不同类型的引号在JavaScript中定义字符串,即双“单”和反勾`。
如果使用反引号开始和结束字符串,则可以在该字符串内使用任何JavaScript变量,而无需终止该字符串并以+串联。例如:
var sql_cmd_ingest = `copy into DEPARTMENT.CLASSES.${TABLE_NAME} from '@DEPARTMENT.CLASSES.CLASSES_PREPROD_STAGE/${TABLE_NAME}';`;
它使SQL更具可读性,尤其是在SQL长且多行的情况下。
此外,阶段名称不应在SQL中用引号引起来。您应该删除它们:
var sql_cmd_ingest = `copy into DEPARTMENT.CLASSES.${TABLE_NAME} from
@DEPARTMENT.CLASSES.CLASSES_PREPROD_STAGE/${TABLE_NAME};`;