कहें कि मेरे पास नमूना तालिका है:एसक्यूएल क्वेरी में वैकल्पिक पैरामीटर कैसे संभालें?
id_pk value
------------
1 a
2 b
3 c
और मेरे पास एक नमूना पीएल/एसक्यूएल ब्लॉक है, जिसमें एक क्वेरी है जो वर्तमान में एक पंक्ति में एक पंक्ति का चयन करती है:
declare
type t_table is table of myTable%rowtype;
n_RequiredId myTable.id_pk%type := 1;
t_Output t_table := t_table();
begin
select m.id_pk, m.value
bulk collect into t_Output
from myTable m
where m.id_pk = n_RequiredId;
end;
मुझे क्या चाहिए यदि n_RequiredID
, जो वास्तव में उपयोगकर्ता-इनपुट पैरामीटर है, null
पर सेट है, तो उपरोक्त ब्लॉक में दिखाए गए अनुसार, किसी सरणी में एक पंक्ति को चुनने के लिए या को सरणी में एक पंक्ति का चयन करने की क्षमता लागू करना है।
और, सवाल यह है कि ऐसी स्थिति को संभालने का सबसे अच्छा अभ्यास क्या है?
मैं अपनी क्वेरी के where
खंड को इस तरह से कुछ संशोधित करने के बारे में सोच सकता हूं:
where m.id_pk = nvl(n_RequiredId, m.id_pk);
लेकिन मुझे लगता है कि अगर पैरामीटर शून्य नहीं होगा, तो मुझे क्वेरी धीमा करने जा रहा है, और मुझे याद है कि क्यूटे ने कहा इस दृष्टिकोण के बारे में कुछ वास्तव में बुरा है।
मैं निम्नलिखित पीएल/एसक्यूएल तर्क को लागू करने के बारे में भी सोच सकता हूं:
if n_RequiredId is null then
select m.id_pk, m.value bulk collect into t_Output from myTable m;
else
select m.id_pk, m.value bulk collect
into t_Output
from myTable m
where m.id_pk = n_RequiredId;
end if;
लेकिन अगर मुझे इस तरह के एक से अधिक पैरामीटर का सामना करना पड़ता है तो यह बहुत जटिल हो जाएगा।
आप मुझे क्या सलाह देंगे?
ओह महान! यह मेरा दिन बचाता है। हालांकि, कॉलम शून्य होने पर पहला व्यक्ति coz काम नहीं करता है, यह खंड शून्य मानों को फ़िल्टर करेगा जबकि प्रश्न में आप दूसरे मामले में शून्य मान फ़िल्टर नहीं करेंगे। –