存储过程中的条件 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

我尝试了什么?我尝试使用计算的 WHEREIF-条件)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%'' ');

文档中涵盖的所有内容http://help.sap.com/saphelp_hanaplatform/helpdata/en/a0/9d584807f84477a64d7625ca45b089/content.htm?frameset=/en/a9/4461d71e8145a78d990deac4823858/frameset.htm&current_toc=/en/ed/4f384562ce4861b48e22a8be3171e5/plain.htm&node_id=73

  • 拉斯