首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条件WHERE-子句在存储过程中

条件WHERE-子句在存储过程中
EN

Stack Overflow用户
提问于 2016-03-30 09:07:31
回答 2查看 1K关注 0票数 0

如果给出了一个特定的值,我想应用一个额外的WHERE-Parameter。我们目前正在研究SAP,但是我们可能能够使严格的存储过程编程适应这个平台。任何帮助都是非常感谢的!下面是密码:

代码语言:javascript
复制
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 (IF-Conditions)和后来的EXECUTE-Command来实现SAP,但是看起来SAP并不支持这一点。然后,我尝试将CASEWHERE-Claus:WHERE ... CASE :wert <> '*' THEN ... END中的需求相匹配。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-30 09:11:36

代码语言:javascript
复制
AND (LW."testVal" LIKE :testVal OR :testVal = '*')
票数 1
EN

Stack Overflow用户

发布于 2016-03-30 13:56:43

为什么不能使用APPLY_FILTER函数呢?

代码语言:javascript
复制
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中,您现在可以提供整个条件。

代码语言:javascript
复制
call test (1, ' "testVal" like ''%ABC%'' ');

文档id=73中涵盖的所有内容

  • 拉尔斯
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36304279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档