Параллельный программный параметр типа даты выдал ошибку ORA-01843: недопустимый месяц

У меня есть 2 параметра в моем отчете. Запрос даты типа данных, я выбрал fnd_standard_date в качестве значения, вот мой запрос

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: недопустимый месяц

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

2 ответа

Если ваши параметры уже 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() конечно. Две ситуации не совпадают.

Большое спасибо!

Проблема с параллельными параметрами 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

Другие вопросы по тегам