2016-09-27 7 views
1

Oralce DBから関数を作成し、Spotfireレポートへの入力として使用しました。ビューの代わりに関数を使用したのは、パラメータに複雑なロジック操作があったため、ビューでそのパラメータを取得できなかったためです。Spotfireで特定のロジックを実装するためにOracle関数が必要

私は作成したレポートに来ています。現在、私は関数で2つのパラメータを使用しており、Spotfireのテキスト領域からData on Demandモードの両方の値を取得しています。問題は、私は両方のパラメータの値を入力しない限り、私は出力を得ることはありません。私の必要条件は、レポートにはいくつかのパラメータを追加する必要がありますが、Spotfireの機能と設定を設定する必要があるため、ユーザーが1つのパラメータレポートを実行する必要がある場合そのパラメータのために。したがって、関数は、値を入力する必要がある場合に入力する必要があり、空であればそれを考慮しないでください。機能が私が言及した仕様で構築されている場合、Spotfireの部分を残して私はそれを直接実装することができます。

私はどこからでもさまざまなソリューションを持っており、適切に実装することはできません。上記のコードはあるように思わ

create or replace function Function_test(p1 varchar2='',p2 varchar2='',p3 varchar2) 
     return SYS_REFCURSOR as 
     my_cursor SYS_REFCURSOR; 
    begin 
     open my_cursor for 

    select distinct 

       x.c1 
       x.c2 
       x.c3 
       from x 
       where x.c1=p3 
       and (p1='' or x.c2=p1) 
       and (p2='' or x.c3=p2); 

     return my_cursor; 
    end; 

:私はすべての例を更新し、正しいものを考え出すに助けを必要とし、それを修正するか、完全に異なる方法でそれを行うには

コードタイプ午前1時MSSQLの例と私は論理を得ることができますが、Oracleに実装する正しい方法は分かりません。私が試したとき、私はちょうどエラーが多かった。

コードタイプ2:上記の例では

create or replace function Function_delete(param1 Varchar2, param2 varchar2) 
    RETURN Varchar2 IS 
    ssql varchar2(3000); 
    test varchar2(1000); 
begin 
    ssql := 'select col1,col2 from table_x'; 
if param1 is null and param2 is not null then 
    ssql := ssql || ' Where col2='''|| param2 ||''''; 
    end if; 
    if param1 is not null and param2 is null then 
    ssql := ssql || ' Where col3= ''' || param1 ||''''; 
    end if; 
    if param1 is not null and param2 is not null then 
    ssql := ssql || ' Where col3 = ''' || param1 || ''' and col2='''|| param2 ||''''; 
    end if; 
    dbms_output.put_line(ssql); 
    execute immediate ssql into test; 
    return test; 
--EXCEPTION 
-- WHEN OTHERS THEN 
    -- return 'Hello'; 
end Function_delete; 

私はそれがデータを取得する列を必要とcosを右スポットファイアのロジックを実装することはできませんよ。最終的に私は、すべてのパラメータが与えられているときだけ作業するのではなく、ユーザーが指定するパラメータを受け入れないコードが必要です。それは私がSpotfire Reportsで同じことを実装できるように、カラムを視覚的に表示する必要があります。

+2

が別個x.c1を選択...コンマは列の間に逃しました – leftjoin

答えて

0

あなたはこれを試すことができます。

create or replace function Function_test(p1 in varchar2,p2 in varchar2,p3 in varchar2) 
     return SYS_REFCURSOR as 
     my_cursor SYS_REFCURSOR; 
    begin 
     open my_cursor for 
    select 
    1 
    from 
    dual 
    where 1=1 
    and '1'=p1 
    and '2'=p2 
    and '3'=p3 ; 

     return my_cursor; 
    end; 
関連する問題