8

pl/sql で数式/関数を解決する必要があります。
次のような数学関数を解決するのに役立つ、oracle 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

このステートメントを解決して の値を調べる関数が必要ですx

このようなものは私が探しているものです

何か助けはありますか?ありがとう。

4

2 に答える 2

7

残念ながら、Oracle データベースは数学的ツールではありません。多くの算術関数と統計関数がありますが、方程式を解釈できる組み込み機能はありません。ごめん。


偶然にも、Marc (AKA Odie_63 ) は最近、PL/SQL で作成した逆ポーランド記法計算機を公開しました。それはあなたが望むことを正確に行うわけではありませんが、将来このスレッドに出くわす可能性のあるシーカーのためにリンクを含めています. 詳細をご覧ください。

于 2013-02-06T13:01:07.330 に答える
4

APC が言ったように、これを行うための組み込み機能はありません。ただし、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

このアプローチには多くの潜在的な欠点があります。非常に遅くなり、API は無料ではありません。無料の開発者 appid を使用したため、私の例は機能しますが、少数の呼び出しにのみ適しています。

于 2013-02-09T05:37:26.237 に答える