Параллельный программный параметр типа даты выдал ошибку 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, только что сделала следующее и решила.
использовал 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
использовал набор значений FND_STANDARD_DATE