【发布时间】:2014-04-11 08:58:53
【问题描述】:
我有一个有趣的问题。我正在尝试使用 Oracle to_char 命令生成 XML 日期。当我使用 PL/SQL 执行此操作时,一切正常:
18:05:54 SQL> select to_char(sysdate, 'yyyy-mm-dd"T"hh24:mi:ss".000Z"') from dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDT
---------------------------------------------------------------------------
2014-04-10T23:09:50.000Z
但是,当我将该日期格式放入 Java 程序并使用准备好的语句时,它会引发一个非常奇怪且无意义的错误“在 index:: 6 处缺少 IN OUT 参数”,这很奇怪,因为只有 5 个参数。我知道这是日期格式,因为如果我更改格式,命令就可以正常工作。
这是我的日期格式字符串和一个有效的:
private static final String XML_DATE = ", 'YYYY-MM-DD\"T\"HH24:MM:SS\"Z\")"; <-- BROKEN
private static final String XML_DATE = ", 'YYYY-MM-DD HH24:MM:SS')"; <-- Working
您可能注意到我需要转义引号以将它们保留在字符串中。
一些额外的信息。这个字符串是从主准备语句中插入的。这就是为什么它看起来有点滑稽。所以我的 SQL 语句的每一行都是这样的:
" NVL(to_char(flt.my_date_dtm" + XML_DATE + ",'') my_date_dtm, " +
实际抛出的错误是这样的:
java.sql.SQLException: Missing IN or OUT parameter at index:: 6
再次,这很奇怪,因为有 5 个参数。有人对它为什么这样做有任何想法吗?
【问题讨论】:
标签: java oracle date prepared-statement