如下程序,调用一次存储过程要 400豪秒,没法接受,可以接受的是 0.5豪秒以内,谢谢
import java.sql.*;
import java.util.*;
import oracle.jdbc.driver.*;
import oracle.sql.*;public class test
{
public static void main(String args[]) throws Exception
{ DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection con = DriverManager.getConnection("jdbc:oracle:oci8:@test","user","pass");
long time1 = System.currentTimeMillis() ;
OracleCallableStatement cstmt = (OracleCallableStatement) con.prepareCall("{call testInPersons(?)}");
        StructDescriptor sd = new StructDescriptor("PERSON", con);
        Object[] personAttrs1 = new Object[] { "This is code11", "100",new NUMBER(32), 200};
        STRUCT person1 = new STRUCT(sd, con, personAttrs1);
        Object[] personAttrs2 = new Object[] { "This is code22", "aaa", new NUMBER(33), 100 };
        STRUCT person2 = new STRUCT(sd, con, personAttrs2);
        ArrayDescriptor ad = new ArrayDescriptor("person_table_type".toUpperCase(), con);
        ARRAY persons = new ARRAY(ad, con, new STRUCT[] { person1, person2 });
        cstmt.setARRAY(1, persons);
        cstmt.execute();long time2 = System.currentTimeMillis() ;
System.out.println(time2-time1);
}

解决方案 »

  1.   

    CREATE OR REPLACE TYPE Person AS OBJECT
    (
           p_code VARCHAR2(32),
           p_name VARCHAR2(16),
           p_age NUMBER,
           p_birthday NUMBER
    );
    /CREATE OR REPLACE TYPE person_table_type IS TABLE OF Person;
    /CREATE TABLE personTable OF person;CREATE OR REPLACE PROCEDURE testInPersons(persons IN person_table_type) IS
    BEGIN
    FORALL i IN persons.first .. persons.count
    INSERT INTO personTable VALUES(persons(i));
    COMMIT;
    END testInPersons;