0

我正在尝试to_datecallableStatement.

我的陈述最终成为

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   
4

2 回答 2

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格式掩码的一部分,尽管您的样本值无论如何都没有小数秒。

但是stmt.setTimestamp()按照 zaratustra 的建议,传递一个实际的时间戳值会更好。这是一个例子:

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".

于 2014-08-05T13:14:54.440 回答
0

为什么不想将您的字符串转换为日期,然后将其发送到您的程序?我已经回答了类似的问题

于 2014-08-05T13:13:16.217 回答