にカスタム配列を渡すには、私はカスタムタイプの値でプロシージャをコールしようとしているが、エラーます。java.sql.SQLException:コールで無効な引数(s)は手順
ます。java.sql.SQLException取得しています:無効な引数を(s)in call。
何が問題なのですか。
ORACLEコード:
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
)
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コードOF TABLE AS TYPEのary_cms_custodian_exigo_code CREATE OR REPLACE:
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 – Ritesh
私がcallstSave.registerOutParameter(1、OracleTypes.ARRAY)にコメントすると、プロシージャを呼び出すことはできますが配列を取得することはできません。 – Ritesh