我正在使用 JDBC
瘦客户端驱动程序调用 Oracle 存储函数。
以下是代码。
class testSP
{
public static void main (String args [])
throws SQLException, ClassNotFoundException
{
String driver_class = "oracle.jdbc.driver.OracleDriver";
String connect_string = "jdbc:oracle:thin:@xxx.xx.xx.xx:1521:xxxx";
Connection conn;
Class.forName(driver_class);
conn = DriverManager.getConnection(connect_string, "xxxx", "xxxx");
// OracleCallableStatement ocs =
// (OracleCallableStatement)conn.prepareCall(
// "{? = call acpks_stmt_gen.fn_stmt_gen(?,?,?,?,?,?)}");
CallableStatement ocs =
conn.prepareCall(
"{? = call acpks_stmt_gen.fn_stmt_gen(?,?,?,?,?,?)}");
ocs.registerOutParameter(1, java.sql.Types.ARRAY);
ocs.setString(2, "144000014");
ocs.setString(3, "RET");
ocs.setString(4, "N");
ocs.setString(5, "3");
ocs.setNull(6, java.sql.Types.DATE) ;
ocs.setNull(7, java.sql.Types.DATE);
ocs.executeUpdate();
// java.sql.ResultSet rs2 = (java.sql.ResultSet) ocs.getResultSet();
}
}
当我调用这个函数时,会得到以下异常:
Exception in thread "main" java.sql.SQLException: ORA-03115: unsupported network datatype or representation
我正在使用由Oracle提供的轻型驱动程序
ojdbc6.jar
。我将其添加到了我的类路径中。
谢谢。
fn_stmt_gen
返回什么?可能只是类型冲突,有各种OracleTypes
可能更合适。最好还是回到OracleCallableStatement
。 - Alex Pooleselect * from table(cast acpks_stmt_gen.fn_stmt_gen(?,?,?,?,?,?) as <your type>)
?了解更多有关该函数的信息可能会有所帮助。 - Alex Poole