Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中以字符串形式传递Oracle函数_Java_Sql_Oracle_Jdbc - Fatal编程技术网

在Java中以字符串形式传递Oracle函数

在Java中以字符串形式传递Oracle函数,java,sql,oracle,jdbc,Java,Sql,Oracle,Jdbc,我有一个这样的问题 String query = "UPDATE tbl_customer_policies SET "+ "start_date = ?," + "next_pay_date = ?,"+ "maturity_date = ?, " + "modified_at = CURRENT_TIMESTAMP,"+ "modifier = ?, status = ? " + "WHER

我有一个这样的问题

String query = "UPDATE tbl_customer_policies SET "+
        "start_date = ?," + 
        "next_pay_date = ?,"+
        "maturity_date = ?, " + 
        "modified_at = CURRENT_TIMESTAMP,"+
        "modifier = ?, status = ? " + 
        "WHERE id = ?";
现在代替
start\u date
的占位符,我想传递一个类似
SYSDATE
的字符串

我现在要做的是在名为
string startDate=“SYSDATE”
的变量中设置该字符串,并将其绑定到该占位符。但我想它似乎不起作用。我得到这个例外

ORA-01858:在需要数字的位置找到非数字字符


我必须通过这样的Oracle函数。如何实现这一点?

如果它总是
sysdate
,则无需对其进行参数化。 直接在查询中设置它,如下所示:

String query = "UPDATE tbl_customer_policies SET "+
        "start_date = sysdate," + // or "start_date = ADD_MONTHS(SYSDATE, 12),"
        "next_pay_date = ?,"+
        "maturity_date = ?, " + 
        "modified_at = CURRENT_TIMESTAMP,"+
        "modifier = ?, status = ? " + 
        "WHERE id = ?";
并像以前一样设置所有其他参数。

使用函数设置日期() 比如说

    "UPDATE tbl_customer_policies SET "+
     "start_date = TO_DATE(?, 'DD-MON-RR')," + 
    "next_pay_date = TO_DATE(?, 'DD-MON-RR'),"+
在这种情况下,不要忘记以“98年10月27日”等格式传递参数

附言。 我误解了这个问题,所以试着纠正我的答案

所描述的问题是由于PreparedStatement Java类的限制。 PreparedStatement对象用于存储对某些预编译(和优化)SQL语句的引用。
因此,您必须只提供用于填充它们的参数值。 函数必须在使用其结果之前进行评估,并且不能将其放置在那里

我想您可以使用Oracle结构化类型的变通方法。 可以使用PreparedStatement的setRef()方法将它们作为引用类型传递。 使用函数可以通过对象构造函数中的包装器实现。
我没有试过,但在我看来这是一个可能的解决办法

好吧,你不能。它必须在查询本身中,而不是在其参数中。实际上,我希望数据库本身能够处理日期计算。我不是用java来处理这个问题,我只是想用db函数来执行这个逻辑,就像<代码>添加月份(系统日期,12)。有了它,我就不必用java进行日期处理了。它不会总是
sysdate
。根据条件,它可以改变。因此,要么你有一组SQL查询,你可以从中改变,要么你可以从SQL查询中调用一个存储过程,但这似乎有点过分了。这不是我问题的答案。再读一遍。我知道我可以使用
将其传递到\u DATE
。我在问是否可以将该函数用作字符串,将其存储在变量中并传递。@pjp很抱歉-我知道您无法确定错误ORA-01858的问题。请参见我的第二次尝试:)