getResults.execute(); //写错了,这个 getResults没看见在哪儿定义啊,应该是个resultset.
应该是CallableStatement直接executeUpdate(),再用变量来接收这个输出参数.
给你个正常运行的代码,对比着改改.jdk1.5+oracle 8.16 通过
package dbtest;import java.sql.*;
import oracle.sql.*;
import oracle.jdbc.*;public class oraarrt
{
public static void main(String[] argc)
{
try {int oracleId = CharacterSet.ZHS16GBK_CHARSET;
CharacterSet dbCharset = CharacterSet.make(oracleId);DriverManager.registerDriver ( new oracle.jdbc.driver.OracleDriver());
Connection conn = DriverManager.getConnection
("jdbc:oracle:oci8:system/manager@ora9");
ARRAY recordArray;
String s = "{call WJW_TEST(?,?,?,?,?,?)}";
OracleCallableStatement oraclecallablestatement = (OracleCallableStatement)conn.prepareCall(s);
s = null;
String parameter1="";
String parameter2="";
oraclecallablestatement.setString(1,parameter1);
oraclecallablestatement.setString(2,parameter2);
oraclecallablestatement.registerOutParameter(3,OracleTypes.ARRAY,"LIST_VARCHAR");
oraclecallablestatement.registerOutParameter(4,2);
oraclecallablestatement.registerOutParameter(5,2);
oraclecallablestatement.registerOutParameter(6,2);
oraclecallablestatement.executeUpdate();
System.out.println("aaa"); //测试输出1
recordArray =oraclecallablestatement.getARRAY(3); String[] values = (String[]) recordArray.getArray();
for (int i = 0; i < values.length; i++)
{
oracle.sql.CHAR out_value = new oracle.sql.CHAR(values[i],dbCharset );
System.out.println(">> index " + i + " = " + out_value);
}
System.out.println("bbb"); //测试输出2}
catch(Exception e)
{
System.out.println(e);
}
}
}
------------------------------------------
aaa
>> index 0 = 111
>> index 1 = 222
>> index 2 = 333
bbb存储过程为:
create or replace procedure WJW_TEST(IN_BLNG_CDV IN VARCHAR2, IN_PST_CDV IN VARCHAR2,OUT_SY OUT LIST_VARCHAR, OUT_SRCH_COUNT OUT NUMBER, OUT_STATUS OUT NUMBER, OUT_SQLCODE OUT NUMBER) is
begin
OUT_SRCH_COUNT:=1;
OUT_SY:=LIST_VARCHAR('111','222','333');
end WJW_TEST;
/