If statement 在IF语句中选择语句

If statement 在IF语句中选择语句,if-statement,plsql,reportbuilder3.0,If Statement,Plsql,Reportbuilder3.0,当参数为0、1或2时,我希望得到与select语句不同的结果。我对PLSQL不是很熟练,所以我不确定我的代码是否会给出预期的结果。如果我运行这段代码,就会在第3行忽略一条SQL语句 BEGIN IF (:PARTYPE = 1) THEN SELECT * FROM x WHERE to_date(date) >= (Select to_date(sysdate)from DNV.dual) ELSE SELECT * FROM x WHERE to_date(date) <= (S

当参数为0、1或2时,我希望得到与select语句不同的结果。我对PLSQL不是很熟练,所以我不确定我的代码是否会给出预期的结果。如果我运行这段代码,就会在第3行忽略一条SQL语句

BEGIN
IF (:PARTYPE = 1) THEN
SELECT * FROM x
WHERE to_date(date) >= (Select to_date(sysdate)from DNV.dual)
ELSE
SELECT * FROM x
WHERE to_date(date) <= (Select to_date(sysdate)from DNV.dual)
END IF;
END;

由于where子句的关系运算符取决于partype,因此不能在这里使用传统的CASE语句。我必须用这个:

  SELECT * FROM x
    WHERE (to_date(date) >= (Select to_date(sysdate)from DNV.dual) AND :PARTYPE = 1)
       OR (to_date(date) <= (Select to_date(sysdate)from DNV.dual) AND :PARTYPE != 1)

尝试替换所需数据中的*。也许这会有帮助。请向我们展示您的完整存储过程。我已经添加了整个sql的审查版本。我正在使用Microsoft SQL报表生成器。它只是一个用于填充表的查询,而不是一个存储过程。如果你想从PL/SQL代码返回结果,你需要创建一个函数,然后像表格一样使用:从某个函数中选择*你不能从PL/SQL块返回这样的结果。是否可以用If语句包围WHERE语句,这样只有WHERE语句会根据参数而改变。或者这也需要一个函数?
Select  t1.user1,
        t1.user2
        From table t1
        Where (Case
            When t1.user2 IS NULL Then t1.user1 in (:PARUSER)
            ELSE t1.user2 in (:PARUSER)
        End Case)
  SELECT * FROM x
    WHERE (to_date(date) >= (Select to_date(sysdate)from DNV.dual) AND :PARTYPE = 1)
       OR (to_date(date) <= (Select to_date(sysdate)from DNV.dual) AND :PARTYPE != 1)