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