procedure - Snowflake - First Proc - 语法有什么问题
问题描述
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 错误 [100131] [P0000]:JavaScript 编译错误:未捕获的 SyntaxError:在 ''INSERT INTO PROC_LOG ("PROC_NAME","EXEC_TIME") SELECT ''VALUE 1'' AS "PROC_NAME",CURRENT_DATE as " EXEC_TIME";'' 位置 62
解决方案
我强烈建议在 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"]
});
主要优点是:
- 您可以同时使用“单”和“双”引号,而不会造成任何保护污染
- 字符串可以是多行的
这两个特性对于 SQL 代码都非常有用。
推荐阅读
- grep - 仅显示来自 grep 的匹配单词的文件名
- electron - 在电子中使用 Vulkan 输出
- javascript - 如何在反应项目中对 redux 状态进行多重过滤?
- java - 如何使用java访问桥获取JTable中的单元格
- react-native - 世博会视频重新渲染状态变化
- html - 'FILE' 输入在第二次尝试后不保留第一个选定元素(多个文件上传)
- python - 使用索引查找矩阵的边缘
- jmeter - 如何使用 JMeter 基于 Keycloak 测试测试登录?
- python - 尝试使用 pyinstaller 制作烧瓶应用程序的独立可执行文件
- java - 使用 Spring Boot 进行 Cucumber 集成测试