如果哪位大虾做过指点一下,谢谢!我看oracle的文档没看太明白,请有经验的兄弟参与讨论一下!

解决方案 »

  1.   

    前几天刚写的一个测试
    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
      

  2.   

    搞反了,前一个是输入到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
      

  3.   

    谢谢keiy能给出WJW_TEST过程的代码吗?谢谢您的帮助!
      

  4.   

    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;
    /
      

  5.   

    另外,类型定义为
    CREATE OR REPLACE TYPE LIST_VARCHAR AS VARRAY(50) of VARCHAR2(500)