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 提供的参数默认为 colX
,colX <=> colX
始终为真。
这是错误信息
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 提供的参数默认为 colX
,colX <=> colX
始终为真。