繁体   English   中英

SQLException(ORA-00900),带有Java至PL SQL日期

[英]SQLException (ORA-00900) with Java to PL SQL Date

我给了一个带有以下参数的PL / SQL函数:

FUNCTION "insert_foo"(c_i IN VARCHAR2, c_t IN VARCHAR2,
         c_d IN VARCHAR2, c_x IN NUMBER, c_b IN NUMBER,
         c_e IN NUMBER, c_valid IN DATE) RETURN NUMBER IS

现在,我尝试从Java程序调用此函数,但出现异常:

java.sql.SQLException: ORA-00900

我敢肯定,最后一个参数,即日期,是导致此异常的原因。

我用这种方式:

Calendar cal = new GregorianCalendar();
cal.add(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);    
// this is my parameter for the Callable Statement
new java.sql.Date(cal.getTimeInMillis());

你能帮助我吗?!

亲切的问候和感谢!

我解决了这个问题!

正如我所想的,那不是约会。 我只是没有以正确的方式调用pl / sql函数。

像这样调用PL / SQL函数

FUNCTION "insert_foo"(c_i IN VARCHAR2, c_t IN VARCHAR2,
     c_d IN VARCHAR2, c_x IN NUMBER, c_b IN NUMBER,
     c_e IN NUMBER, c_valid IN DATE) RETURN NUMBER IS

您必须使用类似的查询字符串

"{? = call insert_foo(?,?,?,?,?,?,?)}"

首先,创建一个CallableStatement(带有java.sql.Connection9的实例,然后用值填充“?”,然后执行函数:

CallableStatement test = java.sql.Connection
        .prepareCall(
    "{? = call insert_foo(?,?,?,?,?,?,?)}");

test.registerOutParameter(1, Types.INTEGER); // <- OutParameter (!)
test.setString(2, "TEST");
test.setString(3, "TEST");
test.setString(4, "TEST");
test.setInt(5, 12);
test.setInt(6, 13);
test.setInt(7, 123);
test.setDate(8, new java.sql.Date(cal.getTimeInMillis()));

System.out.println("-+-+- RESULT -+-+-> " + test.executeUpdate());

暗示:

如果在查询中写“ CALL”而不是“ call”

"{? = call insert_foo(?,?,?,?,?,?,?)}"

您得到一个SQLException:

java.sql.SQLException: SQL92-Zeichenfolge in falschem Format in Position: 5. Expecting "call"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM