} catch(Exception e) { System.out.println(e); } }} ---------------------------------------------------------- create or replace type para as varray(1000) of varchar2(4000) --------------------------------------------------------------- create or replace procedure saveAurhorize( inputValue in para, inputLength in number, busiNo in number, retValue out varchar2) is begin retValue:='111'; end; ----------------------------------------------------------------------- 结果为: 111
搞反了,前一个是输入到oracle,这个才是输出 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
谢谢keiy能给出WJW_TEST过程的代码吗?谢谢您的帮助!
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; /
另外,类型定义为 CREATE OR REPLACE TYPE LIST_VARCHAR AS VARRAY(50) of VARCHAR2(500)
package dbtest;import java.sql.*;
import oracle.sql.*;
import oracle.jdbc.*;public class oraart { public static void main(String[] args) {
try {
DriverManager.registerDriver ( new oracle.jdbc.driver.OracleDriver());
Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@192.168.0.222:1521:csi", "system", "manager");
ArrayDescriptor desc = ArrayDescriptor.createDescriptor("PARA", conn);
String[] needSave= {"2", "1"};
ARRAY mya = new ARRAY (desc, conn, needSave);
CallableStatement cs = conn.prepareCall("{ call saveAurhorize(?,?,?,?) }");
cs.registerOutParameter(4,OracleTypes.VARCHAR);
cs.setArray(1,mya);
cs.setInt(2,needSave.length);
cs.setInt(3,333);
cs.execute();
String p=cs.getString(4);
System.out.println(p);
}
catch(Exception e)
{
System.out.println(e);
}
}}
----------------------------------------------------------
create or replace type para as varray(1000) of varchar2(4000)
---------------------------------------------------------------
create or replace procedure saveAurhorize(
inputValue in para,
inputLength in number,
busiNo in number,
retValue out varchar2) is
begin
retValue:='111';
end;
-----------------------------------------------------------------------
结果为:
111
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
begin
OUT_SRCH_COUNT:=1;
OUT_SY:=LIST_VARCHAR('111','222','333');
end WJW_TEST;
/
CREATE OR REPLACE TYPE LIST_VARCHAR AS VARRAY(50) of VARCHAR2(500)