Thursday, 15 January 2015

oracle - Pass Array of objects From Java to PLSQL Stored Procedure -



oracle - Pass Array of objects From Java to PLSQL Stored Procedure -

i trying pass java array object plsql stored procedure, when trying execute, getting next exception

java.sql.sqlexception: inconsistent java , sql object types

my dao class:

public class uploadtradedaoimpl implements uploadtradedao{ private static logger log = loggerfactory .getlogger(uploadtradedaoimpl.class); private sqlsessionfactory sqlsessionfactory; public sqlsessionfactory getsqlsessionfactory() { homecoming sqlsessionfactory; } public void setsqlsessionfactory(sqlsessionfactory sqlsessionfactory) { this.sqlsessionfactory = sqlsessionfactory; } public int uploadtrade(list<uploadtrade> uploadtradelist) { sqlsession session = sqlsessionfactory.opensession(); seek { connection conn = session.getconnection().getmetadata() .getconnection(); structdescriptor structdescriptor = structdescriptor .createdescriptor("uploadtrade_obj", conn); struct[] teststruct= new struct[uploadtradelist.size()]; arraydescriptor arraydescriptor= arraydescriptor.createdescriptor( "uploadtrade_rec", conn); object[] upload_obj_array = new object[uploadtradelist.size()]; (int index = 0; index < uploadtradelist.size(); index++) { uploadtrade uploadtradeobj = uploadtradelist.get(index); object[] uploadobjects = new object[] { uploadtradeobj.getbustrdid(), uploadtradeobj.getintrnlextl(), uploadtradeobj.getmarsle(), uploadtradeobj.getleg1cflwtype(), uploadtradeobj.getleg2cflwtype(), uploadtradeobj.getrestmntcode(), uploadtradeobj.getrestmntqtr(), uploadtradeobj.gettrdid()}; upload_obj_array[index] = new struct(structdescriptor, conn, uploadobjects); } array obj_array = new array(arraydescriptor, conn, upload_obj_array); callablestatement callablestatement= conn.preparecall("call insertuploadtradeobj(?,?)"); callablestatement.setarray(1, obj_array); callablestatement.registeroutparameter(2, oracletypes.array,"uploadtrade_rec"); callablestatement.execute(); } grab (exception e) { e.printstacktrace(); session.rollback(); log.error("error! in uploadtrade()" + e.getmessage()); homecoming 0; } { session.close(); } homecoming 1; }

i doing using these 2 links: https://community.oracle.com/message/4329339#4329339

pass array java oracle: java.sql.sqlexception: fail convert internal representation:error

please allow me know doing wrong.

thanks in advance

example userentitlementdescriptor = arraydescriptor.createdescriptor("two_d_type", conn.unwrap(oracle.jdbc.oracleconnection.class)); userdescriptor = arraydescriptor.createdescriptor("t_array", conn.unwrap(oracle.jdbc.oracleconnection.class)); userlistarray = new array(userdescriptor, conn.unwrap(oracle.jdbc.oracleconnection.class), userarray); phone call = conn.preparecall("{ ? = phone call user_entitlement_check(?,?,?) }"); call.registeroutparameter(1, types.array, "two_d_type"); // or whatever call.setstring(2, entitlementtags); call.setstring(3, contentid); call.setarray(4, userlistarray); call.execute(); userentitlementarray = (array) call.getobject(1); resultset rsl = userentitlementarray.getresultset(); while(rsl.next()){ array varray3 = (array) rsl.getobject (2); string[] entitlementresultarray = (string[])varray3.getarray(); userentitlementmap.put(entitlementresultarray[0], entitlementresultarray[1]); } } catch(sqlexception sqlexception){ service_logger.error("error while making silverpop phone call content id--"+contentid); } glossary two_d_type -- array type in oracle, t_array -- array type in oracle, userarray -- array in java, entitlementtags,contentid -- string object in java, conn -- connection object in java, call -- callable statement

java oracle stored-procedures jdbc plsql

No comments:

Post a Comment