簡體   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