繁体   English   中英

在输入参数上使用NVL()的存储过程-为什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM