[英]SQL query according to parameter passed
I have a condition, where if the parameter passed is US then I want the input_value to be "Hours Calculated", if it is CA then I want it to be "HRS" and "Hours" and if I do not pass anything then all three should be picked.我有一个条件,如果传递的参数是 US,那么我希望 input_value 是“计算的小时数”,如果是 CA,那么我希望它是“HRS”和“小时”,如果我没有传递任何东西,那么所有应该选择三个。
Select element_name
from element_tab JOIN
INPUTVAL_TAB
where ELEMENT_TAB.LEGISLATION_CODE = nvl(:P_LC,ELEMENT_TAB.LEGISLATION_CODE)
AND INPUTVAL_TAB.INPUT_ID = ELEMENT_TAB.INPUT_ID
AND INPUTVAL_TAB.BASE_NAME = DECODE(:p_LC,'US','Hours Calculated','CA','HRS','CA','Hours')
How can the above query be changed so that if i do not pass:p_LC parameter then 'Hours Calculated','HRS' and 'Hours', all three are picked?如何更改上述查询,以便如果我不传递:p_LC 参数,则选择“计算的小时数”、“小时数”和“小时数”,所有三个都被选中?
You can check for a null value:您可以检查 null 值:
AND (
(:p_LC IS NULL
AND INPUTVAL_TAB.BASE_NAME IN ('Hours Calculated', 'HRS', 'Hours'))
OR (:p_LC IS NOT NULL
AND INPUTVAL_TAB.BASE_NAME = DECODE(:p_LC,'US','Hours Calculated','CA','HRS','CA','Hours'))
)
It might be clearer, for someone maintaining this in the future, to do:对于将来维护此功能的人来说,这样做可能会更清楚:
AND (
(:p_LC IS NULL AND INPUTVAL_TAB.BASE_NAME IN ('Hours Calculated', 'HRS', 'Hours'))
OR (:p_LC = 'US' AND INPUTVAL_TAB.BASE_NAME = 'Hours Calculated')
OR (:p_LC = 'CA' AND INPUTVAL_TAB.BASE_NAME IN ('HRS', 'Hours'))
)
I have already used NVL to check the:p_lc null value
我已经使用 NVL 检查了:p_lc null 值
Not relevant, but personally'd I'd prefer to do the first check the same way;不相关,但我个人更愿意以同样的方式进行第一次检查; so rather than:
所以而不是:
where ELEMENT_TAB.LEGISLATION_CODE = nvl(:P_LC,ELEMENT_TAB.LEGISLATION_CODE)
I would do:我会做:
where (
:p_LC IS NULL
OR ELEMENT_TAB.LEGISLATION_CODE = :p_LC
)
... but that's largely a matter of taste. ......但这主要是一个品味问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.