日期:2014-05-16 浏览次数:20423 次
A . 嵌套表 
1. 声明数组类型 
?????? create or replace type tab_array is table of varchar2(38);暂时不要在包中声明该类型 
2. 创建存储过程 
???????? -- 该例子存储过程是在包中创建的,包名 arraydemo 
???????? procedure testArray(resNumber in tab_array,procResult out tab_array) is 
???????? begin 
???????????? procResult := new tab_array(); 
???????????? for i in 1..resNumber.Count loop 
??????????????? procResult.EXTEND; 
??????????????? procResult(i) := resNumber(i) || 'lucifer' || i; 
???????????? end loop; 
???????? end; 
3. Java调用代码 
??? //必须使用Oracle的连接和Statement,使用了连接池的必须通过一些方法获取原始的连接 
??? OracleConnection conn = null; 
??? OracleCallableStatement stmt = null; 
??? String[] param = { "1001", "1002", "1006" }; 
??? stmt =(转换类型) conn.prepareCall("{call arraydemo.testArray(?,?)}"); 
??? // 类型名必须大写 
??? ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("TAB_ARRAY", conn); 
??? stmt.setARRAY(1, new ARRAY(descriptor,conn,param)); 
??? stmt.registerOutParameter(2, OracleTypes.ARRAY, "TAB_ARRAY"); 
??? stmt.execute(); 
?? 
??? ARRAY array = stmt.getARRAY(2); 
??? Datum[] data = array.getOracleArray(); 
??? for (int i = 0; i < data.length; i++) { 
??????? System.out.println(i + " : " + new String(data.shareBytes())); 
??? } 
4 . 注意的问题及尚未解决的问题 
??? 抛出:Non supported character set: oracle-character-set-852 异常---解决:添加 nls_charset12.jar 到classpath,该包在oracle/ora92/jdbc/lib目录下 
??? 待解决问题: 
??? a) 如何调用在包声明的自定义类型 
??? b) 比较不同声明类型的优缺点,及使用场合 
??? 嵌套表其它应用:http://zhouwf0726.itpub.net/post/9689/212253 
B . 索引表 
C . 内置数组 
D . 游标方式