sql—select 1=1中的可选参数

yyhrrdl8  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(502)

我的函数中有一个可选参数,如果没有指定,我希望显示所有记录,如果是,则只显示具有指定id的记录。我尝试了此代码,但它不起作用。原则是如果p\u pc\u id在表中,那么pc\u id=p\u pc\u id将显示,如果p\u pc\u id为空,则需要1=1

SELECT PC_ID,CLIENT_NUMBER,TRANSACTION_DATE,AMOUNT FROM history_table
WHERE  NVL(NVL(PC_ID,P_PC_ID),'X') = NVL(P_PC_ID,'X')

谢谢

hfsqlsce

hfsqlsce1#

除了gmb的好答案,如果你想使用 NVL 然后你可以这样做:

SELECT PC_ID,CLIENT_NUMBER,TRANSACTION_DATE,AMOUNT 
  FROM history_table
 WHERE NVL(P_PC_ID, PC_ID) = PC_ID

如果 P_PC_ID 如果为空,则它将进行比较 PC_IDPC_ID ,这永远是真的。

nlejzf6q

nlejzf6q2#

我建议使用布尔逻辑而不是嵌套逻辑 NVL() 学生:

select pc_id, client_number, transaction_date, amount 
from history_table
where p_pc_id is null or p_pc_id = pc_id

if参数 p_pc_idnull ,第一个条件为true,返回表中所有行;否则,第一个条件为false,并且只有 pc_id 等于返回的参数。

相关问题