我已经给出了一个带有以下参数的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());你能帮我吗?!
致以亲切的问候和感谢!
发布于 2015-02-10 20:05:03
我解决了这个问题!
不是我想的日期。我只是没有以正确的方式调用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"https://stackoverflow.com/questions/28426746
复制相似问题