【发布时间】:2018-04-04 04:12:33
【问题描述】:
我正在尝试调用具有自定义类型值的过程但出现错误
java.sql.SQLException:调用中的参数无效。
不知道哪里出了问题?
甲骨文代码:
CREATE OR REPLACE TYPE obj_cms_custodian_exigo_code
AS OBJECT
(
fund_cust_exigocode_id NUMBER,
portfolio VARCHAR2(10),
custodian_code VARCHAR2(15),
security_exigo_code VARCHAR2(30),
cash_exigo_code VARCHAR2(30),
CONSTRUCTOR FUNCTION obj_cms_custodian_exigo_code(
fund_cust_exigocode_id NUMBER,
portfolio VARCHAR2,
custodian_code VARCHAR2,
security_exigo_code VARCHAR2,
cash_exigo_code VARCHAR2
)
RETURN SELF AS RESULT
)
创建或替换类型 ary_cms_custodian_exigo_code 作为 obj_cms_custodian_exigo_code 的表
PROCEDURE save_cms_cv_cust_exigo_code
(
p_fund_cust_exigocode IN OUT ary_cms_custodian_exigo_code,
p_user_alias IN vew_user_alias.alias%TYPE
)
...
Java 代码:
Object[] array_of_records=new Object[1];
Object[] custodianExigoSaveKeyRecord=new Object[5];
STRUCT oracleRecord;
StructDescriptor custodianExigotype; //for type
ArrayDescriptor custodianExigotypeTable;//for array
//create descripter for eatch oracle record
custodianExigotype = StructDescriptor.createDescriptor("OBJ_CMS_CUSTODIAN_EXIGO_CODE", connNative);
//create a descripter for array of records
custodianExigotypeTable = ArrayDescriptor.createDescriptor("ARY_CMS_CUSTODIAN_EXIGO_CODE", connNative);
custodianExigoSaveKeyRecord[0]=Double.parseDouble("123");
custodianExigoSaveKeyRecord[1]="abc";
custodianExigoSaveKeyRecord[2]="abc";
custodianExigoSaveKeyRecord[3]="test";
custodianExigoSaveKeyRecord[4]="abc";
System.out.println(" custodian Exigo save 22222222"+i);
oracleRecord=new STRUCT(custodianExigotype,connNative,custodianExigoSaveKeyRecord);
System.out.println(" custodian Exigo after creating STRUCT"+i);
array_of_records[0]=oracleRecord;
System.out.println(" custodian save 3333333333");
ARRAY oracleArray=new ARRAY(custodianExigotypeTable,connNative,array_of_records);
System.out.println("oracle array .."+oracleArray);
System.out.println(oracleArray.getLength()+" length of array .. "+oracleArray.getDescriptor());
callstSave= conn.prepareCall("{call pkg_cms_custodian_exigo_code.save_cms_cv_cust_exigo_code(?,?)}");
callstSave.setArray(1,oracleArray);
callstSave.setString(2, "ABCUSER");//custodianExigoVo.getUserId()
callstSave.registerOutParameter(1, OracleTypes.ARRAY);
System.out.println("before calling proce dure ......");
callstSave.execute();
System.out.println("after calling procedure .........");
Array outarray =callstSave.getArray(1);
【问题讨论】:
-
我可以看到一个可能的问题,但我正在努力获得与您看到的相同的错误。您的代码中的哪一行是该异常被抛出的;您使用的是哪个版本的 Oracle、Java 和 JDBC 驱动程序?
-
Oracle:10,Java 8 ,JDBC14
-
如果我评论 callstSave.registerOutParameter(1, OracleTypes.ARRAY);能够调用程序但不能退出数组..
标签: java arrays oracle stored-procedures jdbc