2015-06-24 42 views
1

我有數據類型日期我的報表查詢2個參數,我選擇了fnd_standard_date爲價值組,這裏是我的查詢併發程序參數給出錯誤ORA-01843:不是有效的月份

Select ordered_date, order_number, customer_id 
From order_tbl xx  
Where NVL(:P_ORDER_NUMBER, xx.order_number) = xx.order_number 
and xx.ordered_date between NVL(trunc(TO_DATE(:P_FROM_DATE, 'YYYY/MM/DD HH24:MI:SS')), xx.ORDERED_DATE) and NVL(trunc(TO_DATE(:P_TO_DATE, 'YYYY/MM/DD HH24:MI:SS'), xx.ORDERED_DATE) 
    AND NVL(:P_CUSTOMER, xx.customer_id) = xx.customer_id> 

在的SQLDeveloper的結果是正確的,但在甲骨文的應用程序,我對着

java.sql.SQLDataException:ORA-01843:不是有效的月份

我可以使用這個參數設置什麼值?
我可以傳遞什麼格式?

+0

哪些格式中的日期? –

+0

默認格式爲「DD-MON-YYYY」,但也試過'YYYY/MM/DD HH24:MI:SS' –

+1

如果P_DATE已經是數據類型DATE,爲什麼要爲它調用TO_DATE?這將使用會話的NLS_DATE_FORMAT執行隱式TO_CHAR,並解釋不同的行爲。或者P_DATE真的是一個字符串? –

回答

1

如果您所說的參數已經是日期,那麼您不應該爲它們調用TO_DATE()。這將使用會話的NLS_DATE_FORMAT將日期隱式轉換爲字符串,然後嘗試使用您指定的格式模型將該字符串轉換回日期。

如果NLS_DATE_FORMAT恰好與您指定的內容匹配,那麼這將起作用,但您不應該依賴這種情況,並且不應該進行隱式轉換;無論如何,你正在做的工作多於你需要的。

所以只是將其簡化爲:

Select ordered_date, order_number, customer_id 
From order_tbl xx  
Where NVL(:P_ORDER_NUMBER, xx.order_number) = xx.order_number 
and xx.ordered_date between NVL(trunc(:P_FROM_DATE), xx.ORDERED_DATE) 
    and NVL(trunc(:P_TO_DATE), xx.ORDERED_DATE) 
AND NVL(:P_CUSTOMER, xx.customer_id) = xx.customer_id> 

如果你從SQL Developer和P_DATE_FROM和_TO聲明爲通過variable命令字符串運行它,那麼你將需要使用當然TO_DATE()。這兩種情況並不相同。

+0

問題在於oracle應用程序上的xml發佈者報告,併發程序參數正在引發一些問題。 –

0

非常感謝!

問題是與xml publisher/ebs併發參數,只是做了以下和解決。

  1. 使用的canonical_to_date查詢

    凡NVL之間TRUNC(xx.ordered_date)(TRUNC(fnd_date.canonical_to_date(:P_FROM_DATE)),xx.ORDERED_DATE)和NVL(TRUNC(fnd_date.canonical_to_date( :P_TO_DATE)),xx.ORDERED_DATE)

  2. 使用的FND_STANDARD_DATE值設置

相關問題