Snowflake UDF 和 Javascript - JavaScript 编译错误问题:未捕获的语法错误
2020-01-01
2070
免责声明:我是 JavaScript 新手,也是在 Snowflake 中编写 JavaScript UDF 的新手。
我正在尝试构建一个 UDF,它将“清除”字符串中任何 ASCII 码不在 32 和 127 之间的字符。当我尝试使用此函数时,出现错误:
Reason:
SQL Error [100131] [P0000]: JavaScript compilation error: Uncaught SyntaxError: missing ) after
argument list in CLEAN at ' FOR (i = 0; i < value.length; i++) {' position 13
在搜索语法中可能导致此问题的原因后,我一无所获。输入的值是长度为 3 的字符串,具有以下 ASCII 码:0、13、0
CREATE OR REPLACE FUNCTION clean(value STRING)
RETURNS string LANGUAGE JAVASCRIPT
AS
$$
var i = 0;
var letter = "";
var newValue = "";
FOR (i = 0; i < value.length; i++) {
letter = value[i].charCodeAt(0)
IF ( letter >= 32 && letter <= 126) {
newValue += value[i];
} elseif (letter = 0) {
newValue += value[i];
}
}
RETURN newValue
$$;
1个回答
两件事:
1) JavaScript 区分大小写,因此 FOR、IF 和 WHILE 等关键字需要小写。(感谢 @waldente 的回答)
另外:
2) 将对输入参数的所有引用从小写
value
更改为大写
VALUE
。例如,将 for 循环中的
value.length
更改为
VALUE.length
在 JavaScript UDF 的文档中有 此部分 ,内容如下:
Note that the JavaScript code must refer to the input parameter names as all upper-case, even if the names are not uppercase in the SQL code
Simon D
2020-01-01