首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在过程中使用where执行条件where子句

问如何在过程中使用where执行条件where子句
EN

Stack Overflow用户
提问于 2016-05-20 00:44:33
回答 2查看 8.1K关注 0票数 0

我有一个非常简单的存储过程,因为我对SQL和PL/SQL都是新手,所以我遇到了麻烦。我有一个表,其名称列是varchar(55)。

我发现,如果用户以空字符串作为参数执行我的过程,则类似的语句将从TABLE1中获取所有行。

代码语言:javascript
复制
SELECT *
FROM TABLE1
WHERE COLUMN LIKE VARIABLE || '%'
AND...

因此,我尝试更改查询,以便如果使用空字符串传递变量,它仍然可以在where语句中执行其他条件。

代码语言:javascript
复制
SELECT *
FROM TABLE1
WHERE (VARIABLE <> '' AND COLUMN LIKE VARIABLE || '%')
AND...

但是现在无论作为变量传递到哪里(‘、NULL、'anystring'),我都不会得到任何返回的行。

如何构建一个查询来验证变量是否与空字符串不同,如果它正确地对变量执行类似的语句?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-20 02:07:39

如果我对你的理解是正确的,那就不难做了。您可以使用案例时使用条件WHERE子句。因此,您的查询将支持不同的场景,如下所示:

代码语言:javascript
复制
SELECT *
FROM TABLE1
WHERE (CASE WHEN variable IS NULL AND column IS NULL THEN 1
            WHEN variable LIKE '%' AND column LIKE variable||'%' THEN 1
            ELSE 0
       END) = 1
AND...

基本上,它检查variable = ''是否会将列与''进行比较。否则,它将与variable||'%'进行比较。

注意,Oracle将VARCHAR类型的空字符串视为NULL (这不适用于CHAR)。因此,在第一个场景中,我们比较了NULL。

票数 2
EN

Stack Overflow用户

发布于 2016-05-20 09:39:31

你好,这只是一个想法,我们也可以使用动态sql。如果您可以尝试这种方法。希望能帮上忙。

代码语言:javascript
复制
CREATE OR REPLACE PROCEDURE SPS_TEST_OUT(
    p_input_in IN VARCHAR2
    )
AS
  lv_sql LONG;
  lv_where VARCHAR2(100);
BEGIN
  lv_where:= CASE WHEN p_input_in IS NULL OR p_input_in = '' THEN 
              ''
             ELSE 
            ' AND COLUMN1 LIKE '''||p_input_in||'''%' 
             END;
  lv_sql:='SELECT * FROM TABLE
            WHERE 1 = 1 
          ' ||lv_where;
  dbms_output.put_line(lv_sql);
END;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37336246

复制
相关文章

相似问题

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