दरअसल, मैंने BIRT रिपोर्ट में इस तरह की चीज़ का इस्तेमाल किया है। BIRT रनटाइम के लिए दिया गया क्वेरी फॉर्म का है:
select a,b,c from t where a = ?
और यह '?' ड्रॉप-डाउन बॉक्स से चयनित वास्तविक पैरामीटर मान द्वारा रनटाइम पर प्रतिस्थापित किया जाता है। ड्रॉप-डाउन में विकल्प निम्न द्वारा दिए गए हैं:
select distinct a from t
union all
select '*' from sysibm.sysdummy1
ताकि आपको सभी संभावित मान प्लस " *
" मिलें । यदि उपयोगकर्ता *
ड्रॉप डाउन बॉक्स से " " का चयन करता है (जिसका अर्थ है कि सभी मानों का चयन किया जाना चाहिए), क्वेरी को रन होने से पहले (जावास्क्रिप्ट द्वारा) संशोधित किया जाना चाहिए।
"के बाद से?" एक स्थितिगत पैरामीटर है और काम करने के लिए अन्य चीजों के लिए ज़रूरी है कि, जावास्क्रिप्ट क्वेरी को संशोधित करता है:
select a,b,c from t where ((a = ?) or (1==1))
यह मूल रूप से जहां अभी भी स्थितीय पैरामीटर छोड़ रहा है, जहां क्लॉज के प्रभाव को हटाता है।
मैंने भी देखा है और आलसी कोडरों द्वारा उपयोग किए जाने वाले मामले को गतिशील रूप से SQL क्वेरी बनाते हुए।
कहते हैं कि आपको गतिशील रूप से एक क्वेरी बनानी होगी जो select * from t
चेक और चेक से शुरू होती है :
- नाम बॉब है; तथा
- वेतन> $ 20,000 है
कुछ लोग WHERE के साथ पहले जोड़ेंगे और बाद वाले एक और के साथ:
select * from t where name = 'Bob' and salary > 20000
आलसी प्रोग्रामर (और यह अनिवार्य रूप से एक बुरा लक्षण नहीं है) अतिरिक्त स्थितियों के बीच अंतर नहीं करेगा, वे इसके साथ शुरू select * from t where 1=1
और बस जोड़ना और उसके बाद क्लॉस करेंगे।
select * from t where 1=1 and name = 'Bob' and salary > 20000