java.sql.SQLDataException: 在 Weblogic 中部署时出现 ORA-01843

java.sql.SQLDataException: ORA-01843 while deploying in Weblogic

我正在尝试对我的 oracle 数据库执行 select 操作。我将查询保存在我的应用程序的 属性 文件中,如下所示:

SELECT EMPLOYEE FROM EMPLOYEETABLE WHERE
JOINING_DATETIME >= ?

JOINING_DATETIME 是 oracle db 中的时间戳列,其值类似于 04-03-20 07:12:27.150000000 PM

我从我的应用程序 04-03-20 05:41:52 PM 中以字符串的形式提供 JOINING_DATETIME 的值,它工作得很好,并且在 [=28= 中的 运行 时按预期进行了必要的操作] 服务器。

但问题是当同样的部署到 Weblogic 应用程序时我收到错误:

java.sql.SQLDataException: ORA-01843: not a valid month

有人可以帮我解决这个问题吗?

您需要在查询中使用正确的格式将 string 转换为 timestamp,如下所示:

SELECT EMPLOYEE
  FROM EMPLOYEETABLE
 WHERE JOINING_DATETIME >= TO_TIMESTAMP(?,'DD-MM-RR HH:MI:SS.FF AM');

更新:

关于您对AM/PM的疑问:

SQL> select TO_TIMESTAMP('04-03-20 07:12:27.150000000 PM','DD-MM-RR HH:MI:SS.FF AM') from dual;
TO_TIMESTAMP('04-03-2007:12:27.150000000PM','DD-MM-RRHH:MI:SS.FFAM')
---------------------------------------------------------------------------
04-MAR-20 07.12.27.150000000 PM

SQL> select TO_TIMESTAMP('04-03-20 07:12:27.150000000 AM','DD-MM-RR HH:MI:SS.FF AM') from dual;

TO_TIMESTAMP('04-03-2007:12:27.150000000AM','DD-MM-RRHH:MI:SS.FFAM')
---------------------------------------------------------------------------
04-MAR-20 07.12.27.150000000 AM

SQL>

JOINING_DATETIME 的值作为 java.sql.Timestamp 而不是字符串提供。