Java调用oracle存储过程输出自定义对象或二维表

来源:互联网 发布:ipad美女直播软件 编辑:程序博客网 时间:2024/05/16 02:00

  1. CREATE TABLE SFZ_TEST_MANAGER_XG(  
  2.        yxgh VARCHAR2(100),  
  3.        ygxm VARCHAR2(100),  
  4.        position_name VARCHAR2(100)  
  5. );  
  6. CREATE TABLE SFZ_TEST_MANAGER_XG AS select T.CCUST_ID as yxgh,T.ACCS_NBR as ygxm,T.CCUST_NAME as position_name from HEMS_FILTER_CUST_LIST t where t.ccust_id is not null and t.accs_nbr is not null and t.ccust_name is not null;  
  7.   
  8. DROP TABLE SFZ_TEST_MANAGER_XG;  
  9.   
  10. select * from SFZ_TEST_MANAGER_XG;  
  11. select count(*) from SFZ_TEST_MANAGER_XG;  
  12.   
  13. create or replace TYPE SFZ_MANAG_M_OBJ_TYPE AS OBJECT(  
  14.       yxgh VARCHAR2(100),  
  15.        ygxm VARCHAR2(100),  
  16.        position_name VARCHAR2(100));  
  17.         
  18. DROP TYPE SFZ_MANAG_M_OBJ_TYPE;  
  19.   
  20. select * from user_objects t where t.object_name not like '%SFZ_MANAG_M_OBJ_TYPE%' and t.object_type = 'TYPE';  
  21.   
  22. CREATE OR REPLACE TYPE SFZ_MANAG_M_TAB_TYPE IS TABLE OF SFZ_MANAG_M_OBJ_TYPE;  
  23.   
  24. DROP TYPE SFZ_MANAG_M_TAB_TYPE;  
  25.   
  26. create or replace procedure proc_sfz_proc_test(user_yxgh IN VARCHAR2,v_table out SFZ_MANAG_M_TAB_TYPE)  
  27. is  
  28.   cursor cursor_cur_type is select * from SFZ_TEST_MANAGER_XG; --可以增加条件  
  29.   i NUMBER(8) :=1;  
  30. BEGIN  
  31.    v_table:=SFZ_MANAG_M_TAB_TYPE();  
  32.    for cursor_record in cursor_cur_type loop  
  33.         v_table.EXTEND;  
  34.         v_table(i) := NEW SFZ_MANAG_M_OBJ_TYPE(cursor_record.yxgh,cursor_record.ygxm,cursor_record.position_name);  
  35.         --v_table(i) := NEW SFZ_MANAG_M_OBJ_TYPE('123','124','125');  
  36.         i:=i+1;  
  37.    end loop;  
  38. end proc_sfz_proc_test;  
  39.   
  40. DROP PROCEDURE proc_sfz_proc_test;  


Java代码  收藏代码
  1. package com.zjhcsoft.test.utl;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5.   
  6. import oracle.jdbc.OracleCallableStatement;  
  7. import oracle.jdbc.driver.OracleTypes;  
  8. import oracle.sql.ARRAY;  
  9. import oracle.sql.Datum;  
  10. import oracle.sql.STRUCT;  
  11.   
  12. public class TestOracleProc {  
  13.   
  14.     /** 
  15.      * @param args 
  16.      */  
  17.     public static void main(String[] args) {  
  18.         try {  
  19.             Class.forName("oracle.jdbc.driver.OracleDriver");  
  20.         } catch (Exception e) {  
  21.             e.printStackTrace();  
  22.         }  
  23.   
  24.         Connection conn = null;  
  25.         String DBurl = "jdbc:oracle:thin:@134.224.40.73:1521:orcl";  
  26.         try {  
  27.             conn = DriverManager.getConnection(DBurl, "hems""hems");  
  28.             System.out.println("Getting Connection...");  
  29.             conn.close();  
  30.         } catch (Exception e) {  
  31.             e.printStackTrace();  
  32.         }  
  33.           
  34.         try {  
  35.             conn = DriverManager.getConnection(DBurl, "hems""hems");  
  36.             long start = System.currentTimeMillis();  
  37.             OracleCallableStatement  cs = (OracleCallableStatement)conn.prepareCall("{call proc_sfz_proc_test(?,?)}");  
  38.             cs.setString(1"fruitking");  
  39.             cs.registerOutParameter(2, OracleTypes.ARRAY,"SFZ_MANAG_M_TAB_TYPE");  
  40.             cs.execute();  
  41.             long end = System.currentTimeMillis();  
  42.             System.out.println("this procedure consumes "+((end-start)/1000)+" excute time.");  
  43.             start = System.currentTimeMillis();  
  44.             ARRAY array = (ARRAY)cs.getArray(2);  
  45.             Datum[] datas = array.getOracleArray();  
  46.             if(datas.length>0){  
  47.                 System.out.println("this procedure has "+datas.length+" data.");  
  48.                 for (int i = 0; i < datas.length; i++){  
  49.                     if(datas[i]!=null&&((STRUCT) datas[i])!=null){  
  50.                     Datum[] personAttributes = ((STRUCT) datas[i]).getOracleAttributes();  
  51.                     System.out.println("column"+(i+1)+":"+new String(personAttributes[0].getBytes())+",  "+new String(personAttributes[1].getBytes())+",  "+new String(personAttributes[2].getBytes()));  
  52.                     }else{  
  53.                         System.out.println("datas["+i+"] is null.");  
  54.                     }  
  55.                 }  
  56.             }else{  
  57.                 System.out.println("this procedure is not result data...");  
  58.             }  
  59.             end = System.currentTimeMillis();  
  60.             System.out.println("show this procedure data consumes "+((end-start)/1000)+" excute time.");  
  61.             cs.close();  
  62.             conn.close();  
  63.         } catch (Exception e) {  
  64.             e.printStackTrace();  
  65.         }  
  66.     }  
  67.   
  68. }  

原创粉丝点击