SQLException(ORA-00900)与Java到PL SQL日期

时间:2015-02-10 08:03:01

标签: java oracle plsql

我已经使用以下参数给出了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());

你能帮助我吗?!

亲切的问候和感谢!

1 个答案:

答案 0 :(得分:0)

我解决了这个问题!

这不是我所说的日期。我只是没有以正确的方式调用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的实例,然后用值a填充“?”,然后执行函数:

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"