最近,我来分析他们在以下场景中使用的程序。我想知道这个有什么用?
一个程序(cwrkid, date)
选择语句
WHERE CWRK.cwrkid = NVL(in_cwrk_id,CWRK.cwrkid)
并且in_cwrk_id
通过了null
。很明显,CWRK.cwrkid = CWRK.cwrkid
将永远匹配......使用变量和传递null
并最终满足真实条件有什么意义。
我是错过了什么还是我想了很多..:P
最近,我来分析他们在以下场景中使用的程序。我想知道这个有什么用?
一个程序(cwrkid, date)
选择语句
WHERE CWRK.cwrkid = NVL(in_cwrk_id,CWRK.cwrkid)
并且in_cwrk_id
通过了null
。很明显,CWRK.cwrkid = CWRK.cwrkid
将永远匹配......使用变量和传递null
并最终满足真实条件有什么意义。
我是错过了什么还是我想了很多..:P
如果您想让该过程在未来的开发中可重用,这很有用。目前唯一的用例是选择所有记录,但如果您只需要获取具有给定 ID 的一条记录,您也可以使用此过程。
关键是调用者可以决定是否cwrkid
应该应用过滤器。对该函数的一次调用可能会传递NULL
该参数,以不应用任何过滤器。如果调用者确实想要应用过滤器,则对该函数的另一个调用可能会为该参数传递一些值。
我说没有应用过滤器,但我假设该列不可为空。如果该列可以为空,那么无论作为参数值传入什么,都会过滤掉空值。
通常,这样的代码用于在参数为 的情况下具有默认行为NULL
。在这种情况下,WHERE 条件通常仅限于具有给定的记录cwrkid
。但是,如果cwrkid
为 null,则没有限制。
没有NVL
, WHERE 条件将根本不匹配。
如果不进一步了解该程序及其目的,就不可能知道为什么要在这种情况下这样做。