开发者问题收集

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