首页 / JAVA / java调用oracle数组类型
java调用oracle数组类型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java调用oracle数组类型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4592字,纯文字阅读大概需要7分钟。
内容图文
![java调用oracle数组类型](/upload/InfoBanner/zyjiaocheng/494/b43efda81b2049d8b0dabdf6b58d945d.jpg)
再建立引用type
CREATE OR REPLACE TYPE cux_proxy_bid_award_tbl IS TABLE OF CUX_PROXY_BID_AWARD_REC;
java中调用
import java.util.ArrayList; import java.sql.SQLException; import oracle.sql.ARRAY; import oracle.sql.ArrayDescriptor; import oracle.sql.STRUCT; import oracle.sql.StructDescriptor; import oracle.jdbc.OracleCallableStatement; import oracle.jdbc.OracleConnection; public void crtSuppResponseAndBidAward(String auctionHeaderId){ java.util.ArrayList array = new java.util.ArrayList(); PonSourceProxyBidVOImpl vo = this.getPonSourceProxyBidVO1(); vo.first(); vo.previous(); while(vo.hasNext()){ Row row = vo.next(); Object[] obj = new Object[4]; obj[0] = (Number)row.getAttribute("TradingPartnerId"); obj[1] = (Number)row.getAttribute("BidPrice"); obj[2] = (Date)row.getAttribute("BidPublishDate"); obj[3] = (String)row.getAttribute("BidAwardFlag")!=null?row.getAttribute("BidAwardFlag"):"N"; //构造ArrayList array.add(obj); } OracleCallableStatement statement = null; OracleConnection oracleConnection = (OracleConnection)this.getOADBTransaction().getJdbcConnection(); try{ //将arraylist解析为STRUCT STRUCT[] arrayOfSTRUCT = createMyRows(oracleConnection, array); //此处使用引用的TYPE
//不能调用在PACKAGE中定义的TYPE ArrayDescriptor tableOfBidDescriptor = ArrayDescriptor.createDescriptor("CUX_PROXY_BID_AWARD_TBL", oracleConnection); ARRAY localARRAY = new ARRAY(tableOfBidDescriptor, oracleConnection, arrayOfSTRUCT); OracleCallableStatement stmt = (OracleCallableStatement)getOADBTransaction().createCallableStatement("{ call CUX_PON_SOURCING_PUB.AUTO_CRT_BID_AWARD(:1, :2, :3, :4, :5) }", -1); String aucHeaderIdEncrypt = SourcingServerUtil.URLEncrypt(getOADBTransaction(), auctionHeaderId ); stmt.setString(1, aucHeaderIdEncrypt); stmt.setString(2, auctionHeaderId); stmt.setARRAY(3, localARRAY); stmt.registerOutParameter(4, Types.NUMERIC); stmt.registerOutParameter(5, Types.VARCHAR); stmt.execute(); oracle.sql.NUMBER retState = stmt.getNUMBER(4); retState.toString(); System.out.println("stmt.getNUMBER(4) "+stmt.getNUMBER(4)); LogUtil.of(" String.valueOf(stmt.getNUMBER(4)) "+String.valueOf(stmt.getNUMBER(4))+" retState "+retState.stringValue(), this).print(this); ModelUtil.commit(this, true); String retStatus = stmt.getNUMBER(4).stringValue() ; String retMsg = stmt.getString(5); if( "0".equals(retStatus)){ OAException dialogMsg = new OAException("决标完成!", OAException.CONFIRMATION); this.getOADBTransaction().putDialogMessage(dialogMsg); }else{ throw new OAException(retMsg); } }catch(SQLException e){ throw OAException.wrapperException(e); } } ////将arraylist解析为STRUCT private STRUCT[] createMyRows(Connection paramConnection, java.util.ArrayList paramArrayList) { int j = paramArrayList.size(); STRUCT[] arrayOfSTRUCT; try { //此处使用定义的原始TYPE OBJECT,或者TABLE StructDescriptor localStructDescriptor = StructDescriptor.createDescriptor("CUX_PROXY_BID_AWARD_REC", paramConnection); int k; arrayOfSTRUCT = new STRUCT[j]; for (k = 0; k < j; k++) { arrayOfSTRUCT[k] = new STRUCT(localStructDescriptor, paramConnection, (Object[])paramArrayList.get(k)); } } catch (Exception localException) { throw OAException.wrapperException(localException); } return arrayOfSTRUCT; }
参考:
oracle存储过程输入输出数组对象和java调用情况
如何把java中的arrayList转化为oracle中的数组(array)
在PL/SQL中直接使用ORACLE数组
DECLARE l_rec cux_proxy_bid_award_tbl := cux_proxy_bid_award_tbl(); BEGIN FOR i IN 1 .. 5 LOOP l_rec.extend; -- 必须指定,否则会报指针越界 l_rec(i) := cux_proxy_bid_award_rec(i, 100, SYSDATE, ‘Y‘); -- 如果是record也可以直接赋值cux_proxy_bid_award_rec,record的方式仅限于在PACKAGE中定义的TYPE,独立的TYPE只能是OBJECT END LOOP; dbms_output.put_line(l_rec.count); dbms_output.put_line(l_rec(3).trading_partner_id); END;
参考:
ORA-06531: 引用未初始化的收集的问题解决
java调用oracle数组类型
标签:调用 import 不能 oid nec message ted .exe ref
本文系统来源:http://www.cnblogs.com/huanghongbo/p/7827862.html
内容总结
以上是互联网集市为您收集整理的java调用oracle数组类型全部内容,希望文章能够帮你解决java调用oracle数组类型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。