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で同じことを実装できるように、カラムを視覚的に表示する必要があります。
が別個x.c1を選択...コンマは列の間に逃しました – leftjoin