JavaScript compilation error: Uncaught SyntaxError: Unexpected token '>' in string variable at if condition -- Snowflake

JavaScript compilation error: Uncaught SyntaxError: Unexpected token '>' in string variable at if condition -- Snowflake

这是错误信息

JavaScript compilation error: Uncaught SyntaxError: Unexpected token '>' in HP_SEARCHCBHMESSAGES at ' if (Fac123 <> "") ' position 1..

某些原因 SF 不喜欢 if 条件 (Fac123 <> "" ),已经尝试过 if (Fac123 <> '' ) 但同样的错误

请帮忙!

CALL PROC1('param1' )

CREATE OR REPLACE PROCEDURE PROC1("param1" nvarchar(100) )
returns varchar
language javascript
AS 
$$

var Fac123 = param1
**if (Fac123 <> "" )** 
    {
      sql12 = " AND "
    }
return sql12 ;

需要修改'if'语句,在var声明后加上semi-colon,请参考下面-

错误代码-

CREATE OR REPLACE PROCEDURE PROC1("param1" nvarchar(100) )
returns varchar
language javascript
AS
$$
var Fac123 = param1
if (Fac123 <> "" )
    {
      sql12 = " AND "
    }
return sql12 ;
$$
;
+--------------------------------------+
| status                               |
|--------------------------------------|
| Function PROC1 successfully created. |
+--------------------------------------+
1 Row(s) produced. Time Elapsed: 0.151s

CALL PROC1('param1' );
100131 (P0000): JavaScript compilation error: Uncaught SyntaxError: Unexpected token '>' in PROC1 at 'if (Fac123 <> "" )' position 12

固定代码-

CREATE OR REPLACE PROCEDURE PROC1("param1" nvarchar(100) )
returns varchar
language javascript
AS
$$
var Fac123 = param1;
if (Fac123 != "" )
    {
      sql12 = " AND "
    }
return sql12 ;
$$
;
+--------------------------------------+
| status                               |
|--------------------------------------|
| Function PROC1 successfully created. |
+--------------------------------------+

CALL PROC1('param1' );
+-------+
| PROC1 |
|-------|
|  AND  |
+-------+

在 JavaScript 过程中,唯一可用的有效语言是 Javascript。 因此,您必须使用 javascript“不等于”,即 !==

CREATE OR REPLACE PROCEDURE PROC1("param1" nvarchar(100) )
returns varchar
language javascript
AS 
$$

var Fac123 = param1
if (Fac123 !== "" )
{
      sql12 = " AND "
}
return sql12 ;
$$;

现在可以使用了

call PROC1('blar');

给出:

PROC1
AND

但是传入一个空字符串..

call PROC1('');

给出错误,因为您的代码还没有处理该路径。

100132 (P0000): JavaScript execution error: Uncaught ReferenceError: sql12 is not defined in PROC1 at 'return sql12 ;' position 0

stackstrace:

PROC1 line: 8

所提供的代码建议尝试构建一个代码生成器,一种称为 kitchen sink 的模式(即,如果提供了参数,则应包含该参数,否则从 WHERE 条件中删除)。

替代方法是简单地使用 NULL 安全比较。如果缺失值作为空字符串传递,则:

SELECT *
FROM ...
WHERE ...
  AND col IS NOT DISTINCT FROM COALESCE(NULLIF("param1", ''), col)

如果应用程序将缺失值作为 NULL 传递,那么它就简单多了:

SELECT *
FROM ...
WHERE ...
  AND col IS NOT DISTINCT FROM COALESCE("param1", col)

这样全部使用AND:

提前叠加条件
SELECT *
FROM ...
WHERE ...
  AND col  IS NOT DISTINCT FROM COALESCE("param1", col)
  AND col2 IS NOT DISTINCT FROM COALESCE("param2", col2)
  AND col3 IS NOT DISTINCT FROM COALESCE("param3", col3) 
  -- ...

作为 NULL 提供的参数默认为 colXcolX <=> colX 始终为真。