我从Oralce DB创建了一个函数,并将其用作Spotfire报表的输入。我使用函数而不是视图的原因是因为参数有一些复杂的逻辑操作,我无法在视图中完成这些操作。在Spotfire中实现某些逻辑所需的Oracle函数
来到我已经建成的报告。目前,我在该功能中使用了2个参数,并且我正在采用Data on Demand模式中的Spotfire文本区域的值。问题是,除非我输入两个参数的值我不会得到输出。我的要求是,我需要为报告添加更多参数,但我需要设置Spotfire中的函数和设置,以便如果有5个参数,如果用户只输入一个参数报告应该运行为那个参数。所以函数需要这样的一种方式,即如果输入的值应该被采用,并且如果它留空,那么就不应该被考虑。离开Spotfire的一部分,如果功能与我所提到的具体细节我可以直接实施。
我已经得到了不同的解决方案,我无法正确实施任何操作。我更新所有的例子,需要搞清楚正确的,纠正,或做在一个完全不同的方式
代码类型1的帮助:
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;
上面的代码似乎是从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的逻辑正确的。最终我需要一个代码,它不接受用户给出的参数,而不是仅在给出所有参数时才工作。它需要显示可见的列,因为这样我可以在Spotfire报告中实施相同的功能。
选择不同x.c1 ...逗号列之间错过 – leftjoin