2009-09-23 17 views
39

में बूलियन प्रकार का उपयोग करने मैं पैरामीटर में बूलियन के साथ एक PL/SQL समारोह है:कैसे SELECT कथन

function get_something(name in varchar2, ignore_notfound in boolean); 

इस समारोह 3 पार्टी उपकरण का एक हिस्सा है, मैं इसे बदल नहीं सकते।

मैं इस तरह एक SELECT कथन के अंदर इस सुविधा का उपयोग करना चाहते हैं:

ORA-00904:

select get_something('NAME', TRUE) from dual; 

यह काम नहीं करता, मैं इस अपवाद "TRUE": अमान्य पहचानकर्ता

जैसा कि मैं इसे समझता हूं, कीवर्ड TRUE पहचाना नहीं गया है।

मैं यह काम कैसे कर सकता हूं?

उत्तर

24

आप इस प्रकार का आवरण समारोह का निर्माण कर सकते हैं:

function get_something(name in varchar2, 
        ignore_notfound in varchar2) return varchar2 
is 
begin 
    return get_something (name, (upper(ignore_notfound) = 'TRUE')); 
end; 

तो फोन:

select get_something('NAME', 'TRUE') from dual; 

यह क्या ignore_notfound की मान्य मान अपने संस्करण में हैं आप पर निर्भर है, मैं मान लिया है 'सही 'सच है और कुछ और मतलब गलत है।

+11

ओरेकल पर आते हैं, यह वास्तव में गूंगा सीमा है – craigrs84

+8

मैं इस तकनीक को औचित्य देता हूं कि ओरेकल इस तकनीकी रूप से कैसे औचित्य देता है। –

-1

पीएल/एसक्यूएल शिकायत कर रहा है कि TRUE मान्य पहचानकर्ता या चर नहीं है। एक स्थानीय चर सेट अप करें, इसे सत्य पर सेट करें, और इसे get_something फ़ंक्शन में पास करें।

+4

नहीं है, Oracle SQL बस :-( –

+0

प्लस बूलियन मान संसाधित नहीं कर सकता, मैं एक दृश्य परिभाषा इस सुविधा का उपयोग करने के लिए, एक स्क्रिप्ट के अंदर नहीं चाहता –

+0

@Ula, टोनी:। तब मैं समारोह लपेटकर लगता है सबसे उपयुक्त तरीका –

19
documentation से

:

आप एक डेटाबेस स्तंभ में मान TRUE और FALSE नहीं डाल सकते। आप कॉलम मानों को BOOLEAN चर में चुन या ला नहीं सकते हैं। क्वेरी से बुलाए गए कार्यों में कोई भी BOOLEAN पैरामीटर नहीं ले सकता है। न तो TO_CHAR जैसे कार्यों में अंतर्निहित हो सकता है; उत्पादन में BOOLEAN मूल्यों का प्रतिनिधित्व करने के लिए, आप इतने पर इस तरह के 0 या 1, 'Y' या 'N', 'true' या 'false' के रूप में कुछ अन्य प्रकार में BOOLEAN मूल्यों, और अनुवाद करने के लिए IF-THEN या CASE निर्माणों का उपयोग करना चाहिए।

आपको एक रैपर फ़ंक्शन बनाना होगा जो SQL डेटाटाइप लेता है और इसके बजाय इसका उपयोग करता है।

5

बुलेन डेटा प्रकार एक पीएल/एसक्यूएल डेटा प्रकार है। ओरेकल समकक्ष SQL डेटा प्रकार (...) प्रदान नहीं करता है, आप एक रैपर फ़ंक्शन बना सकते हैं जो SQL प्रकार को BOOLEAN प्रकार पर मानचित्र करता है।

चेक करें: http://forums.datadirect.com/ddforums/thread.jspa?threadID=1771&tstart=0&messageID=5284

-1

कैसे एक अभिव्यक्ति जो सच (या गलत) का मूल्यांकन का उपयोग कर के बारे में?

select get_something('NAME', 1 = 1) from dual 
+0

यह काम नहीं करता है, मुझे वाक्यविन्यास त्रुटि मिलती है। –

+1

काम नहीं करता है ... – GabrielOshiro

2

इसे अपने डेटाबेस में संकलित करें और अपनी क्वेरी में बूलियन स्टेटमेंट का उपयोग शुरू करें।

नोट: फ़ंक्शन एक varchar2 param मिलता है, इसलिए अपने कथन में किसी भी "तार" को लपेटना सुनिश्चित करें। यह सच के लिए 1 और झूठी के लिए 0 वापस आ जाएगा;

select bool('''abc''<''bfg''') from dual; 

CREATE OR REPLACE function bool(p_str in varchar2) return varchar2 
is 
begin 

execute immediate ' begin if '||P_str||' then 
      :v_res := 1; 
     else 
      :v_res := 0; 
     end if; end;' using out v_res; 

     return v_res; 

exception 
    when others then 
    return '"'||p_str||'" is not a boolean expr.'; 
end; 
/
38

आप निश्चित रूप से एक चयन करें क्वेरी से बूलियन मान प्राप्त कर सकते हैं, तो आप सिर्फ एक बूलियन डेटा प्रकार का उपयोग नहीं कर सकते हैं।

आप 1/0 के साथ एक बूलियन का प्रतिनिधित्व कर सकते हैं।

CASE WHEN (10 > 0) THEN 1 ELSE 0 END (It can be used in SELECT QUERY) 

SELECT CASE WHEN (10 > 0) THEN 1 ELSE 0 END AS MY_BOOLEAN_COLUMN 
    FROM DUAL 

रिटर्न, 1 (हाइबरनेट/माइबेटिस/आदि 1 में सत्य है)। अन्यथा, आप एक चयन से प्रिंट करने योग्य बूलियन मान प्राप्त कर सकते हैं।

SELECT CASE WHEN (10 > 0) THEN 'true' ELSE 'false' END AS MY_BOOLEAN_COLUMN 
FROM DUAL 

यह स्ट्रिंग 'true' देता है।

+1

बिल्कुल क्या मैं देख रहा था। धन्यवाद! – Baxter

+2

हालांकि सवाल के लिए पूरी तरह से अप्रासंगिक। सवाल यह नहीं था कि "मैं बूलियन के बजाय संख्याओं का उपयोग कैसे करूं"। – cartbeforehorse

3
select get_something('NAME', sys.diutil.int_to_bool(1)) from dual; 
संबंधित मुद्दे