我找到了在Oracle BI Publisher 10G的数据集中编写条件SQL语句的语法。例如,我希望数据可以是完整的细节,也可以根据我定义的参数进行区分。
说明我想要的东西:
将有一个参数,例如P_UNIQUE
,这是一个用户可以选择的选项列表,列表包含这些值
数据是唯一的,值= 1
数据不唯一,值= 2
然后根据用户选择,运行时数据集中执行的SQL命令将是:
SELECT
DISTINCT
FIRSTNAME || ' ' || LASTNAME AS EMP_NAME,
DECODE(TRANSACTIONTYPE, 19, 'SUCCESS', 'FAILURE') AS ACCESS_ATTEMPT,
READERDESCRIPTION AS DOOR,
etc…
或
SELECT
FIRSTNAME || ' ' || LASTNAME AS EMP_NAME,
DECODE(TRANSACTIONTYPE, 19, 'SUCCESS', 'FAILURE') AS ACCESS_ATTEMPT,
READERDESCRIPTION AS DOOR,
etc…
(请注意上一代码段中的 Distinct 关键字)
当然,这在SQL中是不可能的,但我在BI 10G中遇到了这个惊人的功能来实现它,请参阅下面的代码:
SELECT
{$ if ${P_UNIQUE}='1' $}
DISTINCT
{$endif$}
/*no need for else, the distinct keyword will simply not be presented if the p_unique parameter value is not equal to 1*/
FIRSTNAME || ' ' || LASTNAME AS EMP_NAME,
DECODE(TRANSACTIONTYPE, 19, 'SUCCESS', 'FAILURE') AS ACCESS_ATTEMPT,
READERDESCRIPTION AS DOOR,
etc…
这在10G中完美运行
现在我遇到的问题是,我们迁移到11G,所有来自10G的报告现在正在正常和11G中的预期,但你不能写此代码从头开始,在11G的开发时无法识别,如果查询包含错误,您将无法保存查询,尽管它在迁移的报告中有效。
另外,出于同样的原因,我无法在这些迁移的报告中编辑和保存我的编辑内容。
那么,如何克服这个开发时间限制并能够保存查询而不管其中写入了什么?
正如我之前所说,它正在11G中工作,但我无法使用这些特殊命令编辑现有或创建新的。
因此,任何建议都将受到赞赏。
答案 0 :(得分:1)
尝试弹性域的概念,它是新引入的BI 11g
答案 1 :(得分:1)
此问题现已在最新的Oracle 11g补丁中修复
11g Release 1 (11.1.1)
这是在之前的版本中。
添加了一个下拉框,允许开发人员选择查询类型Type of SQL
,此类型查询的最佳选择是Non-Standard SQL
刚试过它,它工作正常