存储过程

时间:2016-03-30 09:07:31

标签: sql stored-procedures sap hana

如果给出了特定值,我想应用额外的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

我尝试了什么?我尝试CONCAT SELECT计算WHEREIF - 条件)a EXECUTE - 命令,但似乎SAP HANA没有'支持那个。然后我尝试将要求与CASE中的WHERE匹配 - 克劳斯:WHERE ... CASE :wert <> '*' THEN ... END

2 个答案:

答案 0 :(得分:1)

AND (LW."testVal" LIKE :testVal OR :testVal = '*')

答案 1 :(得分:0)

为什么不能使用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

中涵盖的所有内容
  • 拉斯