2013-02-06 40 views
8

मुझे pl/sql में गणित समीकरण/फ़ंक्शन को हल करने की आवश्यकता है।गणित कार्यों को हल करें पीएल/एसक्यूएल

(3.5/(1+x))+(3.5/(1+x)^2)+(3.5/(1+x)^3)+(3.5/(1+x)^4)+(100/(1+x)^4)=101.55

मैं इस बयान को हल करने और का मूल्य पता लगाने के लिए एक समारोह चाहते हैं:
गणित संचालन किस तरह/कार्य ओरेकल PL/SQL में उपलब्ध हैं कि मुझे इस तरह एक गणित समारोह को हल मदद कर सकता है x

Something like this is what I am looking for

किसी भी मदद की? धन्यवाद।

+0

मुझे लगता है, चूंकि आप SQL का उपयोग कर रहे हैं, तो डेटाबेस 'x' के मान को आपूर्ति करेगा, क्या यह सही है? –

+0

नहीं, असल में मेरा मतलब है कि x xd –

+1

का मान क्या है यदि यह फ़ंक्शन में निर्मित नहीं है, तो आप या तो ब्रूट फोर्स का उपयोग करेंगे या कुछ कस्टम फ़ंक्शन लिखेंगे। आप जो करना चाहते हैं उसके आधार पर, मैं गणित (http://www.wolfram.com/mathematica) – tbone

उत्तर

7

अलास ओरेकल डेटाबेस गणितीय उपकरण नहीं है। इसमें बहुत सारे arithmetical and statistical functions हैं लेकिन इसमें अंतर्निहित व्याख्या करने में सक्षम अंतर्निहित कार्यक्षमता नहीं है। माफ़ कीजिये।


तक सरासर संयोग मार्क (उर्फ Odie_63) हाल ही में एक रिवर्स पोलिश संकेतन कैलकुलेटर जिसमें उन्होंने PL/SQL में लिखा है प्रकाशित किया है। यह ठीक वही नहीं करता जो आप चाहते हैं लेकिन मैं किसी भी साधक के लाभ के लिए एक लिंक शामिल कर रहा हूं जो भविष्य में इस धागे पर ठोकर खा सकता है। Find out more.

4

एपीसी ने कहा, ऐसा करने के लिए कोई अंतर्निहित कार्यक्षमता नहीं है। लेकिन तुम PL/SQL से WolframAlpha API उपयोग कर सकते हैं:

declare 
    v_equation varchar2(32767) := 
     '(3.5/(1+x))+(3.5/(1+x)^2)+(3.5/(1+x)^3)+(3.5/(1+x)^4)+(100/(1+x)^4)=101.55'; 
    v_escaped_url varchar2(32767); 
    v_uri httpuritype; 
    v_xml xmltype; 
    v_count number := 1; 
begin 
    --Escape the URL. 
    --I used chr(38) for ampersand, in case your IDE think it's a substitution variable 
    v_escaped_url := 
     'http://api.wolframalpha.com/v2/query?appid=EQGHLV-UYUEYY9ARU'||chr(38)||'input=' 
     ||utl_url.escape(v_equation, escape_reserved_chars => true) 
     ||chr(38)||'format=plaintext'; 

    --Create an HTTPURIType, and get the XML 
    v_uri := httpuritype.createUri(v_escaped_url); 
    v_xml := v_uri.getXML; 

    --Complex solutions 
    while v_xml.existsNode('/queryresult/pod[@title="Complex solutions"]/subpod['||v_count||']') = 1 loop 
     dbms_output.put_line(v_xml.extract('/queryresult/pod[@title="Complex solutions"]/subpod['||v_count||']/plaintext/text()').getStringVal()); 
     v_count := v_count + 1; 
    end loop; 

    --Real solutions 
    v_count := 1; 
    while v_xml.existsNode('/queryresult/pod[@title="Real solutions"]/subpod['||v_count||']') = 1 loop 
     dbms_output.put_line(v_xml.extract('/queryresult/pod[@title="Real solutions"]/subpod['||v_count||']/plaintext/text()').getStringVal()); 
     v_count := v_count + 1; 
    end loop; 
end; 
/

परिणाम:

x = -1.00006-0.996229 i 
x = -1.00006+0.996229 i 
x = -1.99623 
x = 0.0308219 

इस दृष्टिकोण के लिए संभावित कमियां की एक बहुत कुछ कर रहे हैं। यह बहुत धीमा होगा, और एपीआई मुक्त नहीं है। मेरा उदाहरण काम करता है क्योंकि मैंने अपने फ्री डेवलपर एपिड का इस्तेमाल किया, लेकिन यह केवल छोटी संख्या में कॉल के लिए अच्छा है।

+0

क्षमा करें, लेकिन मैं एक "स्टैंडअलोन" दृष्टिकोण –

+0

+1 ढूंढ रहा हूं यह एक पार्टी चाल है, और उस पर एक साफ है। लेकिन कई उत्पादन प्रणालियों डेटाबेस को इस तरह की दूसरी साइट से कनेक्ट करने की अनुमति नहीं देंगे। इसके अलावा आपका आवेदन किसी तृतीय पक्ष की उपलब्धता पर निर्भर हो जाता है। बेशक कई एंटरप्राइज़ सिस्टम इन दिनों वेब सेवाओं के बने होते हैं, लेकिन शायद ही कभी उन्हें डेटाबेस से बुलाते हैं। – APC