有点不清楚你想在这里做什么。
如果您在寻找结果集,Oracle 不返回结果集,您需要将您的参数之一定义为 SYS_REFCURSOR 类型的输出参数。
String command = "{call sfmd.getNativeIdsForXID(?,?)}";
CallableStatement cstmt = connection.prepareCall(command);
cstmt.registerOutParameter(1, ORACLE_CURSOR_TYPE);
cstmt.setObject(2, 'EDDAC');
cstmt.execute();
ResultSet rs = (ResultSet) cstmt.getObject(1);
在您的存储过程中,定义输出参数
CREATE OR REPLACE PROCEDURE "getNativeIdsForXID" (
NativeIdsCursor OUT SYS_REFCURSOR,
P_XID VARCHAR(20)) IS
open NativeIdsCursor for
SELECT ID from SomeTable where XID = P_XID;
END "getNativeIdsForXID";
如果您在存储过程中使用 dbms_output 包,您也可以获得输出。
这里有几个实用程序可以做到这一点。您启用 dbms 输出,然后像往常一样执行您的过程,然后您可以打印输出。
public static void enableDBMSOutput(DBConnection conn, int buffer_size) {
try {
String SQLString = null;
if (buffer_size > 0)
SQLString = "sys.dbms_output.enable(?)";
else
//SQLString = "{call sys.dbms_output.enable(buffer_size => NULL) }"; // Unlimited
SQLString = "sys.dbms_output.enable(buffer_size => NULL)"; // Unlimited
CallableStatement stmt = conn.getCallableStatement(true, SQLString);
if (buffer_size > 0)
stmt.setInt(1,buffer_size);
stmt.execute();
System.out.println("DBMS_OUTPUT has been Enabled!");
} catch (SQLException e) {
System.out.println("Problem occurred enabling dbms_output: " + e.toString());
}
}
public static void disableDBMSOutput(DBConnection conn) {
try {
String SQLString = "sys.dbms_output.disable()";
CallableStatement stmt = conn.getCallableStatement(true, SQLString);
stmt.execute();
System.out.println("DBMS_OUTPUT has been Disabled!");
} catch (SQLException e) {
System.out.println("Problem occurred disabling dbms_output: " + e.toString());
}
}
public static void printDBMSOutput(DBConnection conn) {
try {
String SQLString = "sys.dbms_output.get_line(?,?)";
CallableStatement stmt = conn.getCallableStatement(true, SQLString);
stmt.registerOutParameter(1,java.sql.Types.VARCHAR);
stmt.registerOutParameter(2,java.sql.Types.NUMERIC);
int status = 0;
String output = null;
do {
stmt.execute();
output = stmt.getString(1);
status = stmt.getInt(2);
if (null != output)
System.out.println("dbms_output: " + output);
} while (status == 0);
} catch (Exception e) {
System.out.println("Problem occurred during print_dbms_output: " + e.toString());
}
}
public static String [] getDBMSOutput(DBConnection conn) {
try {
String SQLString = "{call sys.dbms_output.get_line(?,?)}";
CallableStatement stmt = conn.getCallableStatement(true, SQLString);
stmt.registerOutParameter(1,java.sql.Types.VARCHAR);
stmt.registerOutParameter(2,java.sql.Types.NUMERIC);
int status = 0;
String output = null;
ArrayList <String> dbmsOutput = new ArrayList<String>();
do {
stmt.execute();
output = stmt.getString(1);
status = stmt.getInt(2);
if (null != output)
dbmsOutput.add(output);
} while (status == 0);
return (String [])dbmsOutput.toArray();
} catch (Exception e) {
System.out.println("Problem occurred during print_dbms_output: " + e.toString());
return null;
}
}
}
public CallableStatement getCallableStatement(boolean isProcedure, String sqlString){
try {
if (isProcedure) {
String query = "{ call " + sqlString + " }";
return dbConn.prepareCall(query);
} else
return dbConn.prepareCall(sqlString);
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}