Snowflake - First Proc - 语法有什么问题
Snowflake - First Proc - What is wrong with Syntax
CREATE OR REPLACE PROCEDURE "PUBLIC".PHONE_DATA_ROLLUP()
RETURNS VARCHAR
LANGUAGE javascript
AS
$$
var rs = snowflake.execute( { sqlText:
'INSERT INTO PROC_LOG ("PROC_NAME","EXEC_TIME") SELECT ''value 1'' AS "PROC_NAME", CURRENT_TIMESTAMP as "EXEC_TIME";'
});
return 'Done.';
$$;
CALL PHONE_DATA_ROLLUP();
错误:
SQL Error [100131] [P0000]: JavaScript compilation error: Uncaught
SyntaxError: Unexpected string in PHONE_DATA_ROLLUP at ' 'INSERT
INTO PROC_LOG ("PROC_NAME","EXEC_TIME") SELECT ''VALUE 1'' AS
"PROC_NAME", CURRENT_DATE as "EXEC_TIME";'' position 62
in Javascript 这样你可以用反斜杠 (\'
) 来转义单引号而不是双单引号 (''
)
...
'INSERT INTO PROC_LOG ("PROC_NAME","EXEC_TIME") SELECT \'value 1\' AS "PROC_NAME", CURRENT_TIMESTAMP as "EXEC_TIME";'
...
我强烈建议在 JavaScript 过程中对 SQL 字符串使用反引号,以及变量绑定,例如
var rs = snowflake.execute( {
sqlText: `INSERT INTO PROC_LOG ("PROC_NAME","EXEC_TIME")
SELECT :1 AS "PROC_NAME", CURRENT_TIMESTAMP as "EXEC_TIME"`,
binds: ["value 1"]
});
主要优点有:
- 您可以同时使用 'single' 和 "double" 引号而没有任何保护污染
- 字符串可以是多行的
这两个功能对于 SQL 代码非常有用。
CREATE OR REPLACE PROCEDURE "PUBLIC".PHONE_DATA_ROLLUP()
RETURNS VARCHAR
LANGUAGE javascript
AS
$$
var rs = snowflake.execute( { sqlText:
'INSERT INTO PROC_LOG ("PROC_NAME","EXEC_TIME") SELECT ''value 1'' AS "PROC_NAME", CURRENT_TIMESTAMP as "EXEC_TIME";'
});
return 'Done.';
$$;
CALL PHONE_DATA_ROLLUP();
错误:
SQL Error [100131] [P0000]: JavaScript compilation error: Uncaught SyntaxError: Unexpected string in PHONE_DATA_ROLLUP at ' 'INSERT INTO PROC_LOG ("PROC_NAME","EXEC_TIME") SELECT ''VALUE 1'' AS "PROC_NAME", CURRENT_DATE as "EXEC_TIME";'' position 62
in Javascript 这样你可以用反斜杠 (\'
) 来转义单引号而不是双单引号 (''
)
...
'INSERT INTO PROC_LOG ("PROC_NAME","EXEC_TIME") SELECT \'value 1\' AS "PROC_NAME", CURRENT_TIMESTAMP as "EXEC_TIME";'
...
我强烈建议在 JavaScript 过程中对 SQL 字符串使用反引号,以及变量绑定,例如
var rs = snowflake.execute( {
sqlText: `INSERT INTO PROC_LOG ("PROC_NAME","EXEC_TIME")
SELECT :1 AS "PROC_NAME", CURRENT_TIMESTAMP as "EXEC_TIME"`,
binds: ["value 1"]
});
主要优点有:
- 您可以同时使用 'single' 和 "double" 引号而没有任何保护污染
- 字符串可以是多行的
这两个功能对于 SQL 代码非常有用。