在一个存储过程中,我想基于输入参数in_customerid获取客户列表,如果输入的customerid不为null或0,则获取所有customerId等于in_customerid的客户,否则选择所有客户。
我在这里尝试了代码,并使用了case语句
select * from Customer
WHERE (IF in_customerId = 0 OR in_customerId IS NULL
THEN customerId>0
ELSE
customerId=in_customerId
END IF)
如果输入的customerid不为null或0,则获取所有客户 其中customerId等于in_customerid,否则全选 客户。
答案 0 :(得分:1)
您的代码几乎就在那里。尝试以下方法:
SELECT *
FROM Customer
WHERE ((in_customerId IS NULL OR in_customerId = 0) OR
(in_customerId IS NOT NULL AND in_customerId <> 0 AND customerId = in_customerId))
这将返回所有in_customerId
参数为NULL的客户。
对于in_customerId
具有值的情况,它将仅返回匹配的行。
答案 1 :(得分:1)
您可以使用CASE .. WHEN
表达式,因为在此处传递的参数为null或0的情况下,您不需要任何条件,如下所示:
SELECT *
FROM CUSTOMER
WHERE
CUSTOMERID = CASE
WHEN IN_CUSTOMERID = 0
OR IN_CUSTOMERID IS NULL THEN CUSTOMERID
ELSE IN_CUSTOMERID
END;
干杯!
答案 2 :(得分:0)
您可以使用参数nvl()
为nvl(in_customerId,0)
的{{1}}函数来组合in_customerId
为null或零的情况:
SELECT *
FROM customer
WHERE customerId = case when nvl(in_customerId,0) > 0
then in_customerId
else customerId
end;
另一个选项将nvl2()
函数与decode()
一起使用:
SELECT *
FROM customer
WHERE customerId = decode( in_customerId, 0, customerId,
nvl2(in_customerId,in_customerId,customerId) );