求求高手帮忙解决问题,先谢了,在线等!!!!java code::
public void updateTable(String[][] data, int csvSize) {
errorList = new ArrayList();
Connection conn = null;
String updateStatement = null;
CallableStatement pc= null;
try {
conn = this.getCurrentConnect();
StructDescriptor strDesc = StructDescriptor.createDescriptor("STRTYPE",conn.getMetaData().getConnection());
ArrayDescriptor arrDesc = ArrayDescriptor.createDescriptor("ARRTAB", conn.getMetaData().getConnection());
Object[] arrobj=new Object[csvSize];
for (int i = 0; i < csvSize; i++) {
Object[] csvLine = {data[i][0].trim(),data[i][1].trim(),data[i][2].trim(),data[i][3].trim(),data[i][4].trim(),data[i][5].trim(),data[i][6].trim()};
STRUCT csvLineStruct = new STRUCT(strDesc, conn.getMetaData().getConnection(), csvLine);
arrobj[i]=csvLineStruct;
}
ARRAY csvTable = new ARRAY(arrDesc, conn.getMetaData().getConnection(), arrobj);
updateStatement = gloCfg.getInitParameter("sql-updatetable");
pc = conn.prepareCall(updateStatement);
pc.setObject(1, csvTable);
pc.setInt(2, csvSize);
//execute the Update
pc.execute();
conn.commit();
logger.info("success");
}
catch (SQLException se) {
se.printStackTrace();
logger.error("error in method updateTable() because of: " +
se);
errorList.add("The error " +
se.getMessage().substring(se.getMessage().lastIndexOf(":"),
se.getMessage().length()));
}
}procedure code :CREATE OR REPLACE PROCEDURE InsDialerCharge(pa_array in out arrtab,
pi_record_count IN BINARY_INTEGER
)
AS
li_num PLS_INTEGER := 1;
BEGIN
for li_num in 1 .. pi_record_count
loop
insert into RAMT_DIALER_CHARGES(DialerChargeId,
DialerChargeDescription,
BillCycleStartdate,
BillCycleEnddate,
Bill_hours,
Dialer_cost)
values(RAMT_DILAER_CHRG_SEQ.nextval,
pa_array(li_num).col3,
to_date(pa_array(li_num).col4,'yyyy-mm-dd'),
to_date(pa_array(li_num).col5,'yyyy-mm-dd'),
to_number(pa_array(li_num).col6),
to_number(pa_array(li_num).col7));
end loop;
commit;
EXCEPTION
WHEN others THEN
rollback;
raise_application_error(sqlcode,'Failed to insert data to table RAMT_DIALER_CHARGES: ' || sqlerrm);
END InsDialerCharge;
/
error:java.sql.SQLException: ORA-00900: invalid SQL statement
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1093)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2047)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2709)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:589)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:656)
at com.gepower.geep.geglobalsourcing.rams.service.UpdateTableSvcImpl.updateTable(UpdateTableSvcImpl.java:113)
at com.gepower.geep.geglobalsourcing.rams.common.ReadCsvCronCommon.main(ReadCsvCronCommon.java:102)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at com.ge.crd.services.cron.DefaultCronEvent.run(DefaultCronEvent.java:122)
at com.ge.dialect.util.ThreadPool$PooledThread.run(ThreadPool.java:175)
public void updateTable(String[][] data, int csvSize) {
errorList = new ArrayList();
Connection conn = null;
String updateStatement = null;
CallableStatement pc= null;
try {
conn = this.getCurrentConnect();
StructDescriptor strDesc = StructDescriptor.createDescriptor("STRTYPE",conn.getMetaData().getConnection());
ArrayDescriptor arrDesc = ArrayDescriptor.createDescriptor("ARRTAB", conn.getMetaData().getConnection());
Object[] arrobj=new Object[csvSize];
for (int i = 0; i < csvSize; i++) {
Object[] csvLine = {data[i][0].trim(),data[i][1].trim(),data[i][2].trim(),data[i][3].trim(),data[i][4].trim(),data[i][5].trim(),data[i][6].trim()};
STRUCT csvLineStruct = new STRUCT(strDesc, conn.getMetaData().getConnection(), csvLine);
arrobj[i]=csvLineStruct;
}
ARRAY csvTable = new ARRAY(arrDesc, conn.getMetaData().getConnection(), arrobj);
updateStatement = gloCfg.getInitParameter("sql-updatetable");
pc = conn.prepareCall(updateStatement);
pc.setObject(1, csvTable);
pc.setInt(2, csvSize);
//execute the Update
pc.execute();
conn.commit();
logger.info("success");
}
catch (SQLException se) {
se.printStackTrace();
logger.error("error in method updateTable() because of: " +
se);
errorList.add("The error " +
se.getMessage().substring(se.getMessage().lastIndexOf(":"),
se.getMessage().length()));
}
}procedure code :CREATE OR REPLACE PROCEDURE InsDialerCharge(pa_array in out arrtab,
pi_record_count IN BINARY_INTEGER
)
AS
li_num PLS_INTEGER := 1;
BEGIN
for li_num in 1 .. pi_record_count
loop
insert into RAMT_DIALER_CHARGES(DialerChargeId,
DialerChargeDescription,
BillCycleStartdate,
BillCycleEnddate,
Bill_hours,
Dialer_cost)
values(RAMT_DILAER_CHRG_SEQ.nextval,
pa_array(li_num).col3,
to_date(pa_array(li_num).col4,'yyyy-mm-dd'),
to_date(pa_array(li_num).col5,'yyyy-mm-dd'),
to_number(pa_array(li_num).col6),
to_number(pa_array(li_num).col7));
end loop;
commit;
EXCEPTION
WHEN others THEN
rollback;
raise_application_error(sqlcode,'Failed to insert data to table RAMT_DIALER_CHARGES: ' || sqlerrm);
END InsDialerCharge;
/
error:java.sql.SQLException: ORA-00900: invalid SQL statement
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1093)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2047)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2709)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:589)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:656)
at com.gepower.geep.geglobalsourcing.rams.service.UpdateTableSvcImpl.updateTable(UpdateTableSvcImpl.java:113)
at com.gepower.geep.geglobalsourcing.rams.common.ReadCsvCronCommon.main(ReadCsvCronCommon.java:102)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at com.ge.crd.services.cron.DefaultCronEvent.run(DefaultCronEvent.java:122)
at com.ge.dialect.util.ThreadPool$PooledThread.run(ThreadPool.java:175)
csvTable,过程好像不认。
create or replace type strtype as object(col1 varchar2(100),col2 varchar2(200),col3 varchar2(100),col4 varchar2(200),col5 varchar2(200),col6 varchar2(100),col7 varchar2(100))
CREATE OR REPLACE TYPE arrtab as table of strtype这是我定义的类型!!!