2

我在 Oracle BI Publisher 10G 的数据集中找到了编写条件 SQL 语句的语法。例如,我希望数据要么是完整的,要么是根据我定义的参数来区分的。

为了说明我想要的:

会有一个参数,例如P_UNIQUE,这是一个用户可以从中选择的选项列表,该列表包含这些值

数据是唯一的,Value = 1

数据不唯一,Value = 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 中工作,但我无法使用这些特殊命令编辑现有的或创建新的。

因此,任何建议将不胜感激。

4

2 回答 2

1

此问题现已在最新的 Oracle 11g 补丁中得到修复

11g Release 1 (11.1.1)

它在以前的版本中。

添加了一个下拉框,允许开发者选择查询类型Type of SQL,最适合这种类型的查询是Non-Standard SQL

刚刚测试了一下,运行正常

于 2014-08-20T07:48:04.603 回答
1

尝试弹性域的概念,它是 BI 11g 新引入的

链接到 oracle 帮助

于 2014-02-01T07:08:24.087 回答