[英]Stored procedure using NVL() on input parameter - why?
最近,我来分析一个在以下情况下使用它们的过程。 我想知道这有什么用?
程序(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条件将根本不匹配。
如果不进一步了解该程序及其目的,就不可能知道为什么要这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.