2014-01-30 71 views
2

我發現了在Oracle BI Publisher 10G的Datasets中編寫條件SQL語句的語法。例如,我希望數據是全部細節還是根據我定義的參數進行區分。Oracle BI Publisher - 10G和11G之間的不同行爲

爲了說明我想要的東西:

將會有一個參數,例如P_UNIQUE,這是一個選擇列表,用戶可以從中選擇,列表中持有這些值

數據是唯一的,值= 1個

數據不是唯一的,值= 2

然後基於用戶的SelectIO N,在運行時在數據集中的執行的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… 

(注意在前面的代碼片段的鮮明關鍵字)

當然,這在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工作,但我不能編輯現有的或用這些特殊命令創建新的。

所以,任何建議將不勝感激。

回答

1

此問題是現在固定在最新的Oracle 11g補丁

11g Release 1 (11.1.1) 

這是在以前的版本。

一個下拉框已被添加到允許開發者選擇查詢類型Type of SQL,對於這種類型的查詢最適合的還是Non-Standard SQL

只是測試它,它工作正常

1

嘗試彈性域的概念,它是新引入BI11克

Link to oracle help

+0

柔性字段不像那些if語句那樣動態 – simsim

+1

@simsim,仍然可以在select部分中使用它們,其中部分 – user3259864

+1

正確,但問題是我有超過60個使用$ if語句的報表,並且會有一段時間當我需要編輯其中一個報告時,這就是爲什麼我需要查看是否有一種方法可以使此代碼工作而不是尋找不同的概念 – simsim