1

我的报告中有 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: 不是一个有效的月份

我可以为此参数使用什么值集?
我可以通过什么格式?

4

2 回答 2

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 运行它,并通过variable命令将 P_DATE_FROM 和 _TO 声明为字符串,那么您当然需要使用它TO_DATE()。这两种情况并不相同。

于 2015-06-24T11:22:19.660 回答
0

非常感谢!

问题在于xml发布者/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 值集

于 2015-06-25T05:55:15.110 回答