![](/img/trans.png)
[英]java.sql.SQLException: ORA-00900: invalid SQL statement in Ecllips
[英]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.