如何在雪花存储过程中动态创建 sql 时转义单引号?
How to escape single quote while dynamically creating sql in a snowflake stored procedure?
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
您需要在 TABLE_NAME 之后和“from
之前添加一个 space
var sql_cmd_ingest = "copy into DEPARTMENT.CLASSES." + TABLE_NAME + " from '@DEPARTMENT.CLASSES.CLASSES_PREPROD_STAGE/" + TABLE_NAME + "';";
此外,我强烈建议在存储过程中构建 SQL 语句时使用 JavaScript 替换变量。您可以使用三种不同类型的引号来定义 JavaScript、double " single ' 和 back tick `.
中的字符串
如果您使用反引号来开始和结束您的字符串,那么您可以在该字符串中使用任何 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};`;
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
您需要在 TABLE_NAME 之后和“from
之前添加一个 spacevar sql_cmd_ingest = "copy into DEPARTMENT.CLASSES." + TABLE_NAME + " from '@DEPARTMENT.CLASSES.CLASSES_PREPROD_STAGE/" + TABLE_NAME + "';";
此外,我强烈建议在存储过程中构建 SQL 语句时使用 JavaScript 替换变量。您可以使用三种不同类型的引号来定义 JavaScript、double " single ' 和 back tick `.
中的字符串如果您使用反引号来开始和结束您的字符串,那么您可以在该字符串中使用任何 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};`;