यह मेरी निरंतर निराशा है कि ओरेकल पीएल/एसक्यूएल bool
डेटा-प्रकार का समर्थन करता है, जबकि ओरेकल एसक्यूएल नहीं करता है। जब आप पीएल/एसक्यूएल बूलियन रिटर्न-वैल्यू को अपने रोज़ाना एसक्यूएल (नीचे उदाहरण) में वापस संसाधित करना चाहते हैं तो यह प्रोवर्बियल में एक बड़ा दर्द है।बूल समर्थन ओरेकल एसक्यूएल
यहां तक कि पूछे जाने वाले टॉम वेबसाइट भी इस मिस्फीट के बारे में ब्लेज़ है, यह रिपोर्ट करते हुए कि आपको बूलियन कॉलम को निश्चित मूल्य 'Y'/'N' CHAR
कॉलम के रूप में कोड करना चाहिए, जो कि इतने सारे अलग-अलग स्तरों पर इतना खराब पुलिस-आउट उत्तर है जो मैं नहीं करता पता है कि इसकी आलोचना कहां शुरू करें। वास्तव में, इस प्रतिक्रिया की एकमात्र रिडीमिंग गुणवत्ता तथ्य यह है कि (जहां तक मैंने हाल ही में खोज की है), कई अन्य डेटाबेस-इंजन बुलियन डेटा-प्रकार का समर्थन नहीं करते हैं।
किसी भी तरह - सवाल ...
मैं एक काम के आसपास निम्नलिखित समस्या के लिए (गन्दा और वर्बोज़ यद्यपि) है, तो मैं जिज्ञासा के बजाय आवश्यकता के इस सवाल पूछ रहा हूँ। लेकिन कुछ चीजों में से एक जो मुझे आश्चर्यचकित करता है वह चालाक प्रोग्रामर की सरलता है, इसलिए यहां उम्मीद है कि आप में से एक निम्नलिखित के समाधान के साथ आ सकता है।
निम्नलिखित नमूने में, समारोह stock_pkg.is_in_stock()
(जो अपने आवेदन का एक अंतर्निहित हिस्सा है) एक बूल मान देता है, एसक्यूएल अमान्य (याद एसक्यूएल BOOL समर्थन नहीं करता) प्रतिपादन:
SELECT part_no, stock_pkg.is_in_stock(part_no) in_stock
FROM parts_table
मैं क्या जरूरत है इसके बाद के संस्करण समारोह-कॉल का उपयोग कर प्रारूप का एक मान्य स्ट्रिंग (varchar) उत्पादन उत्पन्न करने के लिए करने का एक तरीका मिल रहा है:
PART_NO IN_STOCK
------- ------------
AA YES
BB NO
CC NO
(आप के लिए सही/गलत 'हां/नहीं' स्थानापन्न कर सकते हैं ',' हरा/लाल ',' टोरी/श्रम 'या यहां तक कि संख्यात्मक 1/0 की सभी देखभाल के लिए - बस इतनी देर तक आउटपुट दो अलग-अलग श्रेणियों में से एक में आता है।)
दुर्भाग्यवश, मुझे मूल कार्य को फिर से लिखने का विशेषाधिकार नहीं है अलग डेटा प्रकार। और इसके अलावा, इस तरह के हजारों कार्य बड़े अनुप्रयोग के चारों ओर बिखरे हुए हैं, जिससे उन्हें सभी को फिर से लिखना अव्यवहारिक बना देता है।
तो इस अर्थ में, समाधान एक 'जेनेरिक' होना चाहिए (यानी इस फ़ंक्शन कॉल के लिए विशिष्ट नहीं है)। उदाहरण के लिए, फ़ंक्शन को stock_pkg.is_in_stock_chr()
के रूप में फिर से लिखना पर्याप्त नहीं है, क्योंकि इसका मतलब है कि मेरे आवेदन में अन्य सभी समान कार्यों को फिर से लिखना होगा।
मैं पहले से ही की कोशिश की है:
SELECT part_no,
CASE WHEN stock_pkg.is_in_stock(part_no) THEN 'y' ELSE 'n' END in_stock
FROM parts_table
और यहां तक कि अपने खुद के आवरण समारोह:
SELECT part_no,
my_bool_to_str(stock_pkg.is_in_stock(part_no)) in_stock
FROM parts_table
लेकिन फिर भी अन्य कार्यात्मक निर्माणों के अंदर बूलियन्स लपेटकर प्रतीत नहीं होता Oracle SQL (द्वारा की अनुमति दी कम से कम ओरेकल 10 जी में नहीं)।
in_stock
कॉलम के अंदर एक उप-चयन लिखने का विकल्प भी है, लेकिन यह अत्यधिक उदाहरणों में अत्यधिक जटिल हो सकता है, और यह केस-विशिष्ट भी होगा।
जैसा कि मैंने कहा, मुझे उम्मीद है कि वहां कहीं भी एक सरल समाधान है (या कम से कम एक बहुत ही सरल जिसे मैंने अनदेखा किया है)।
आपके समय के लिए धन्यवाद।
पहचान नहीं करता है यह मेरे लिए स्पष्ट नहीं है कि आपका प्रश्न क्या है। क्या आप एक एसएलएल मान को पीएल/एसक्यूएल बूलियन डेटा प्रकार में वापस करने के लिए पूछ रहे हैं? –
@ डेविड एल्ड्रिज: मैं पूछ रहा हूं कि एक पीएल/एसक्यूएल बूलियन डेटा-प्रकार (पीएल/एसक्यूएल फ़ंक्शन से लौटाया गया) को रन-ऑफ-द-मिल एसक्यूएल क्वेरी में कैसे लौटाया जाए। मेरे पास एक साधारण एसक्यूएल-क्वेरी प्लेटफार्म है जिसे इस पीएल/एसक्यूएल-जेनरेटेड बूलियन वैल्यू के मूल्य को अंत उपयोगकर्ता को वापस करने की आवश्यकता है। – cartbeforehorse