我在oracle 10g中有以下查询:
select IN_OUT_DATE, STORE_NO, ART_NO, SUPPL_NO, SUPPL_TYPE, QTY
from oltp_transactions_hist
where art_no = :art_no and store_no = :store_no and in_out_type<50 and in_out_date between :X and :Y
如果变量:all为零,我想在 where 子句中添加以下表达式:
case
WHEN :all = 0 OLD_NN_BUY_PRICE_BEF<>OLD_NN_BUY_PRICE_AFT
END CASE;
这可能吗?
答案 0 :(得分:0)
case
表达式返回除boolean
之外的任何数据类型的值,可以与另一个值进行比较。 where
子句要求一组或多组条件对于给定的数据集为真或假。
此外,case
和where
是两回事。您绝对可以在case
子句中使用where
构造,但您必须知道它们的用途。 case
构造比较一组条件并返回一个值,而where
子句用于根据需求过滤行。
例如,为了进一步澄清,请考虑以下代码:
select 1 as coll
from dual
where case :x
when 1 then 2
else 0
end = 2;
您无法删除结束短语= 2
,因为您需要比较 case
构造返回的值。你不能简单地在case
子句中引入开放式where
构造,而不将其值与任何东西进行比较。此外,如果输入x = 1,您将获得一行。如果你没有,你就不会。