我正在从 java webapp 向 Oracle 存储过程发出请求,该存储过程恰好有一个 Timestamp IN 参数。
信息的传播方式类似于:
javaWebApp --} webservice 客户端 --} ws --} storedProcedure
我将时间戳参数作为格式化字符串从 web 服务客户端发送到 ws。
在测试环境中,它可以发送:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss a");
input.setTimestampField(dateFormat.format(new Date()));
如您所见,发送了一个格式化的字符串。但是在生产环境中,它引发了一个异常
ORA-01830: date format picture ends before converting entire input string.
它与格式不同有关,可能是由于一个 DB 与另一个 DB 的配置不同。我知道测试环境应该是生产站点的副本,但是我无法正确设置它们。尽管他们设置数据库的方式如何,我仍需要发送 Timestamp-as-a-formatted-string 字段。有任何想法吗?提前致谢。
**** 编辑****:尽管有特定的配置,我还是找到了让它正常工作的方法。就像使用适当的 Oracle 指令在 Web 服务中设置调用指令一样简单。我的意思是,对 Oracle 存储过程的调用来自
"call PACKAGE.MYPROCEDURE(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
至
"call PACKAGE.MYPROCEDURE(?,?,?,?,?,?,TO_TIMESTAMP(?, 'DD-MM-YYYY HH24:MI:SS'),?,?,?,?,?,?,?,?,?,?,?)"
虽然我在过程调用中设置的格式与 webapp 使用原始问题中所述的 SimpleDateFormat 发送的格式相匹配,但稍作修改:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
谢谢大家的帮助和想法。