我已经使用以下参数给出了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());
你能帮助我吗?!
亲切的问候和感谢!
答案 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"