存储过程中的条件 WHERE 子句
Conditional WHERE-clause at stored procedures
我想应用一个额外的 WHERE
参数,如果给定了特定值的话。我们目前正在研究 SAP-Hana,但我们可能能够使严格的存储过程编程适应这个平台。非常感谢任何帮助!所以这是代码:
PROCEDURE test (
IN id integer,
IN testVal VARCHAR(20) DEFAULT '*',
out ex_return DB-SCHEME
)
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER
--DEFAULT SCHEMA <default_schema_name>
READS SQL DATA AS
BEGIN
ex_return =
SELECT
L."ID",
LW."ID"
FROM DB1 L
INNER JOIN DB2 LW
ON L."id" = LW."id"
WHERE
L."id" = :id
AND LW."testVal" LIKE :testVal -- this one only, if :testVal != '*'
;
END
我尝试了什么?我尝试使用计算的 WHERE
(IF
-条件)CONCAT
SELECT
然后 EXECUTE
-命令,但 SAP HANA 似乎没有不支持。然后我尝试在 WHERE
-Claus 中将要求与 CASE
相匹配:WHERE ... CASE :wert <> '*' THEN ... END
AND (LW."testVal" LIKE :testVal OR :testVal = '*')
为什么您不能使用 APPLY_FILTER 功能?
PROCEDURE test (
IN id integer,
IN testVal VARCHAR(20) DEFAULT '',
out ex_return DB-SCHEME
)
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER
--DEFAULT SCHEMA <default_schema_name>
READS SQL DATA AS
BEGIN
ex_return =
SELECT
L."ID",
LW."ID"
FROM DB1 L
INNER JOIN DB2 LW
ON L."id" = LW."id"
WHERE
L."id" = :id;
ex_filtered = APPLY_FILTER (:ex_return, :testVal);
END;
在变量 testVal 中,您现在可以提供整个条件,例如
call test (1, ' "testVal" like ''%ABC%'' ');
- 拉斯
我想应用一个额外的 WHERE
参数,如果给定了特定值的话。我们目前正在研究 SAP-Hana,但我们可能能够使严格的存储过程编程适应这个平台。非常感谢任何帮助!所以这是代码:
PROCEDURE test (
IN id integer,
IN testVal VARCHAR(20) DEFAULT '*',
out ex_return DB-SCHEME
)
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER
--DEFAULT SCHEMA <default_schema_name>
READS SQL DATA AS
BEGIN
ex_return =
SELECT
L."ID",
LW."ID"
FROM DB1 L
INNER JOIN DB2 LW
ON L."id" = LW."id"
WHERE
L."id" = :id
AND LW."testVal" LIKE :testVal -- this one only, if :testVal != '*'
;
END
我尝试了什么?我尝试使用计算的 WHERE
(IF
-条件)CONCAT
SELECT
然后 EXECUTE
-命令,但 SAP HANA 似乎没有不支持。然后我尝试在 WHERE
-Claus 中将要求与 CASE
相匹配:WHERE ... CASE :wert <> '*' THEN ... END
AND (LW."testVal" LIKE :testVal OR :testVal = '*')
为什么您不能使用 APPLY_FILTER 功能?
PROCEDURE test (
IN id integer,
IN testVal VARCHAR(20) DEFAULT '',
out ex_return DB-SCHEME
)
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER
--DEFAULT SCHEMA <default_schema_name>
READS SQL DATA AS
BEGIN
ex_return =
SELECT
L."ID",
LW."ID"
FROM DB1 L
INNER JOIN DB2 LW
ON L."id" = LW."id"
WHERE
L."id" = :id;
ex_filtered = APPLY_FILTER (:ex_return, :testVal);
END;
在变量 testVal 中,您现在可以提供整个条件,例如
call test (1, ' "testVal" like ''%ABC%'' ');
- 拉斯