不支持的功能“|”。雪花正则表达式中的 Statement.execute 错误

Unsupported feature '|'. At Statement.execute error in snowflake regular expression

create or replace procedure sp(path varchar)
returns varchar
language javascript
as
$$
var a="regexp_replace(PATH,'\[\'\|\'\]')";
var b="SELECT \n"+ a + " as path_name";
var c=snowflake.createStatement({sqlText:b});
var d=c.execute();
d.next();
return d.getColumnValue(1);
$$;
call sp('['Bank Country']');

当我尝试在显示错误的存储过程中使用它时,此正则表达式在过程外部工作。

Execution error in store procedure SP: Unsupported feature '|'. A Statement. execute, line 6 position 8.

我正在尝试使用正则表达式执行此操作,如果我的字符串采用这种格式“['Bank Country']”-->“Bank Country”,这意味着它必须去掉“['”和如果“['”位于第一个索引位置,则字符串中的“']”。如果字符串之间存在这些特殊字符,则必须以这种方式进行。 例如,“客户['Bank Details']”-->“Customer.Bank 详细信息” 它必须去掉“['”并将其替换为“。”并删除字符串中的“']”。

如果您在 createStatement 之前 return b,您将确切地看到此代码创建的查询类型。

在本例中是 SELECT regexp_replace(PATH,'\['|'\]') as path_name,这没有意义。

请提出一个新问题来解释此函数的目标、示例输入、示例所需输出,我们可以提供帮助。

与此同时,一种无需 UDF 即可完成最后一段要求的简单方法:

select translate($$Customer['Bank Details']$$, $$[]'$$, '.')

鉴于这是 this question

的延续

你在那里 SQL 有效。

select regexp_replace('[\'Customers NY\']','\[\'|\'\]','') as customername;

select translate('[\'Customers NY\']',$$[']$$,'');

因此,正如 Felipe 所说:return 尽早检查您构建的 SQL:

create or replace procedure sp(path varchar)
returns varchar
language javascript
as
$$
    var a="regexp_replace(PATH,'\[\'\|\'\]')";
    var b="SELECT \n"+ a + " as path_name";
    return b;

    //var c=snowflake.createStatement({sqlText:b});
    //var d=c.execute();
    //d.next();
    //return d.getColumnValue(1);
$$;

并称​​它为:

call sp('[\'Bank Country\']');

给出:

SELECT  regexp_replace(PATH,'\['|'\]') as path_name;

此时有两个问题,你没有将PATH代入你的动态SQL。你失去了一些逃避。

我假设你是一名学生,所以我不会给你一个可行的解决方案,因为那是你要学习的工作。

  1. 您当前正在将a代入b,但PATH并未代入a

  2. 您的组合 SQL 将由 SQL 解析器解析,因此需要有效 SQL,因此字符串需要有效 started/stopped,并且如果您要使用与此处相同的标记,则需要对其进行转义,但转义也需要转义以通过存储过程的解析。

鉴于我相信你是一名学生,而且 Felipie 的“这可以通过存储过程更简单地完成”是正确的,它更简单,如果你必须“以这种方式完成作业”,那么事情你需要学习的就是以上几点