2013-01-09 82 views
0

我是新來的使用APEX PL/SQL並提前道歉,如果我的問題已被覆蓋。我相信已經徹底地尋找答案。APEX-返回SQL查詢與PL/SQL中的日期錯誤

我有一個標準的查詢,它應該作爲一個區域的來源,但需要轉換到PL/SQL,所以我可以處理從我將要添加的班車返回的LOV。

這是工作查詢的關鍵部分:

select METRIC_DEFINITION_ID, 
     METRIC_NAME, 
     sum(decode(START_DATE, '01-JUN-12', VALUE)) as "Jun 2012" 

from ... (a substantial query that works) 

當我試圖從一個PL/SQL塊返回此:

BEGIN 
return 'select METRIC_DEFINITION_ID, 
     METRIC_NAME, 
     sum(decode(START_DATE, ' '01-JUN-12' ', VALUE)) as "Jun 2012" 

     from ... (a substantial query that works)'; 
END; 

我收到錯誤消息:

(ORA-06550: line 9, column 33: PLS-00103: Encountered the symbol "01-JUN-12" 
when expecting one of the following: * & = - + ; < ... 

就好像編譯器期待操作符一樣。

我已經試過

...TO_DATE(' '01-JUN-12' ')... 

沒有成功。將字符串傳遞給一個變量並返回,這也沒有任何區別。

我讀過的所有文檔都表明我的原創應該有效。

有沒有人知道在這種情況下是否有'解碼'的不同語法(某個地區的APEX源碼),還是我在這裏丟失了明顯的東西?

所有建議表示讚賞。

乾杯, 傑森

===========

添加完整的查詢,如要求。注意行

and METRIC_COLLECTION.METRIC_COLLECTION_ID IN :P44_COLLECTION_SELECTOR) 

如果有一個項目是在航天飛機命名P44_COLLECTION_SELECTOR selelcted目前僅適用,因此需要學習PL/SQL。

日期將基於長期投入 - 這是一個POC。

select 
METRIC_DEFINITION_ID, 
    METRIC_NAME, 
    sum(decode(START_DATE, '01-JUN-12', VALUE)) as "Jun 2012", 
    sum(decode(START_DATE, '01-JUL-12', VALUE)) as "Jul 2012", 
    sum(decode(START_DATE, '01-AUG-12', VALUE)) as "Aug 2012", 
    sum(decode(START_DATE, '01-SEP-12', VALUE)) as "Sep 2012", 
    sum(decode(START_DATE, '01-OCT-12', VALUE)) as "Oct 2012", 
    sum(decode(START_DATE, '01-NOV-12', VALUE)) as "Nov 2012" 

from 

(select 
METRIC_DEFINITION.METRIC_DEFINITION_ID as METRIC_DEFINITION_ID, 
METRIC_DEFINITION.METRIC_NAME as METRIC_NAME, 
METRIC_VALUE.START_DATE as START_DATE, 
METRIC_VALUE.VALUE as VALUE 
from  
METRIC_VALUE METRIC_VALUE, 
METRIC_DEFINITION METRIC_DEFINITION 
where 
METRIC_DEFINITION.METRIC_DEFINITION_ID=METRIC_VALUE.METRIC_DEFINITION_ID) 

where METRIC_DEFINITION_ID IN 

(select 
METRIC_COLLECTION_MAP.METRIC_DEFINITION_ID as METRIC_DEFINITION_ID 
from  METRIC_COLLECTION_MAP METRIC_COLLECTION_MAP, 
METRIC_COLLECTION METRIC_COLLECTION 
where 
METRIC_COLLECTION.METRIC_COLLECTION_ID=METRIC_COLLECTION_MAP.METRIC_COLLECTION_ID 

and 
METRIC_COLLECTION.METRIC_COLLECTION_ID IN :P44_COLLECTION_SELECTOR) 

group by METRIC_DEFINITION_ID, METRIC_NAME 

回答

0

爲什麼你在你的報價之間放置空格?

嘗試改變:

sum(decode(START_DATE, ' '01-JUN-12' ', VALUE)) 

要:

sum(decode(START_DATE, ''01-JUN-12'', VALUE)) 

我明白這是因爲:

execute immediate 'select to_date(' '01-JUN-12' ') from dual'; 

返回相同的錯誤。

+0

謝謝,但''是正確的語法,從我讀過的。錯誤消息更改爲:ORA-06550:第6行,第32列:PLS-00103:遇到符號「01」時期待以下之一... – user1964553

+0

爲了逃避撇號,在''之間不能有空格。它必須立即進行或Oracle假定字符串已結束。 –

+0

我以爲編譯器會這樣讀:return'select ... sum(decode(START_DATE,'as a string,then'01 -JUN-12')。我發現很多APEX PL/SQL示例類似於:v_somevar :='一個字符串''一個字符串需要用單引號''剩下的字符串';但是我還沒有找到一個使用日期的例子 – user1964553