1

最近,我来分析他们在以下场景中使用的程序。我想知道这个有什么用?

一个程序(cwrkid, date)

选择语句

  WHERE CWRK.cwrkid = NVL(in_cwrk_id,CWRK.cwrkid)

并且in_cwrk_id通过了null。很明显,CWRK.cwrkid = CWRK.cwrkid 将永远匹配......使用变量和传递null并最终满足真实条件有什么意义。

我是错过了什么还是我想了很多..:P

4

3 回答 3

0

如果您想让该过程在未来的开发中可重用,这很有用。目前唯一的用例是选择所有记录,但如果您只需要获取具有给定 ID 的一条记录,您也可以使用此过程。

于 2014-08-11T09:18:19.810 回答
0

关键是调用者可以决定是否cwrkid应该应用过滤器。对该函数的一次调用可能会传递NULL该参数,以不应用任何过滤器。如果调用者确实想要应用过滤器,则对该函数的另一个调用可能会为该参数传递一些值。

我说没有应用过滤器,但我假设该列不可为空。如果该列可以为空,那么无论作为参数值传入什么,都会过滤掉空值。

于 2014-08-11T09:18:28.483 回答
0

通常,这样的代码用于在参数为 的情况下具有默认行为NULL。在这种情况下,WHERE 条件通常仅限于具有给定的记录cwrkid。但是,如果cwrkid为 null,则没有限制。

没有NVL, WHERE 条件将根本不匹配。

如果不进一步了解该程序及其目的,就不可能知道为什么要在这种情况下这样做。

于 2014-08-11T09:19:44.850 回答