2015-06-24 1 views
1

У меня есть 2 параметра в моем отчете Query даты типа данных, я выбран 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 результат это нормально, но в приложениях Oracle, я столкнулся

java.sql.SQLDataException: ORA-01843: не действительный месяц

Какое значение можно использовать для этого параметра?
И какой формат я могу пройти?

+0

какие форматы даты в? –

+0

в формате по умолчанию «DD-MON-YYYY», но также попробовал «ГГГГ/ММ/ДД HH24: MI: SS» –

+1

Если P_DATE уже является типом данных DATE, почему вы вызываете TO_DATE для этого? Это сделает неявный TO_CHAR, используя NLS_DATE_FORMAT вашего сеанса, и объяснит различное поведение. Или P_DATE действительно строка? –

ответ

1

Если ваши параметры уже установлены как DATE, вы не должны звонить 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

проблема заключается в том, что отчет издателя xml в приложениях oracle, параметры параллельной программы, создает проблемы. –

0

спасибо!

Проблема заключается в одновременных параметрах xml publisher/ebs, просто сделал следующее и решил.

  1. использовали canonical_to_date в запросе

    Где TRUNC (xx.ordered_date) между NVL (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 набор