我正好做过一个测试:
package dbtest;
//import java.io.IOException;
import java.sql.*;
//import oracle.jdbc.*;
public class oraTest {
public static void main (String args []) {
int i=0;
try
{
DriverManager.registerDriver ( new oracle.jdbc.driver.OracleDriver());
Connection conn = DriverManager.getConnection
("jdbc:oracle:thin:@192.168.0.115:1521:ORA8", "system", "orasystem");
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery (
"select BANNER from SYS.V_$VERSION"
);
while (rset.next())
System.out.println (rset.getString(1)); // Print col 1
CallableStatement cs = conn.prepareCall("{call ptest.test1(?,?)}");
cs.setInt(1,1);//输入参数
System.out.println(oracle.jdbc.OracleTypes.CURSOR);
cs.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR);//输出参数
/*
for( i=-100000;i<0;i++)
{
try {
cs.registerOutParameter(2,i);//输出参数
cs.execute();
}
catch(Exception e){
//System.out.println(i);
continue;
}
System.out.println(i);
break;
}
*/
System.out.println(i);
cs.execute();
ResultSet rs = (ResultSet)cs.getObject(2);
while (rs.next())
System.out.println (rs.getString(1)); // Print col 1
stmt.close();
}
catch(Exception e){
System.out.println(e);
}
}
}
----------------------------------------------------------------------------
CREATE OR REPLACE PACKAGE ptest AS
type c_cor is ref cursor;
PROCEDURE test1(i_in IN NUMBER,c_out OUT c_cor);
END ptest;
/
CREATE OR REPLACE PACKAGE BODY ptest AS
PROCEDURE test1(i_in IN NUMBER,c_out OUT c_cor) as
begin
OPEN c_out FOR select 888 aval from dual;
end test1;
END ptest;
/
---------------------------------------------------------------
结果:
Oracle8 Release 8.0.5.0.0 - Production
PL/SQL Release 8.0.5.0.0 - Production
CORE Version 4.0.5.0.0 - Production
TNS for Linux: Version 8.0.5.0.0 - Production
NLSRTL Version 3.3.2.0.0 - Production
-10
0
888