我试图在to_date
内使用callableStatement
功能。
我的陈述最终成为
RGPKG.PKG_RG_LEAD.ADD_LEAD('TO_DATE('05-Aug-2014 11:53:34 AM', 'DD-MON-RR HH.MI.SSXFF AM')',
<More-parameters-here>)
我使用以下代码构建TO_DATE
函数:
CallableStatement stmt
String dateParam = "TO_DATE('" + sTS + "', 'DD-MON-RR HH.MI.SSXFF AM')";
stmt.setString(1, dateParam);
//set more parameters
stmt.execute();
其中sTS
是正确日期格式的字符串。我可以看到问题是setString
将我的字符串包装在单引号中,但是如何在可调用语句中设置它?
create or replace
PACKAGE BODY PKG_RG_LEAD AS
PROCEDURE ADD_LEAD
(p_created_tstamp IN RG_LEAD.CREATED_TSTAMP%type,
p_created_by IN RG_LEAD.CREATED_BY%type,
数据库中的列创建为
CREATED_TSTAMP TIMESTAMP(6) No systimestamp 2
答案 0 :(得分:0)
为什么不想将字符串转换为日期然后将其发送到您的程序?我已回答similar question already
答案 1 :(得分:0)
如果您打算将字符串传递给调用,则您的语句应为:
RGPKG.PKG_RG_LEAD.ADD_LEAD(TO_TIMESTAMP(?, 'DD-MON-RR HH.MI.SSXFF AM'), ?, ...)
然后您可以使用以下值设置值:
stmt.setString(1, sTS);
如果您需要小数秒和格式掩码的to_timestamp()
部分,则需要to_date()
而不是XFF
,尽管您的样本值无论如何都没有小数秒。
但是,如zaratustra建议的那样,使用stmt.setTimestamp()
传递实际时间戳值会好得多。这是一个例子:
String sTS = "05-Aug-2014 11:53:34 AM";
stmt = conn.prepareCall("{ call RGPKG.PKG_RG_LEAD.ADD_LEAD(?, ?, ...) }";
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yy hh:mm:ss a");
stmt.setTimestamp(1, new Timestamp(sdf.parse(sTS).getTime()));
...
如果您的实际值确实有小数秒,则格式为"dd-MMM-yy hh:mm:ss.S a"
。