자바 Oacle 저장 과정 에서 배열 방법 소결 전달

3155 단어 Oacle
자바 가 Oacle 에 저장 하 는 과정 에서 배열 방법 소결 을 전달 합 니 다. 다음은 저장 과정 에서 필요 한 예 입 니 다.
하나의 배열 을 받 아들 이 고 하나의 배열 을 출력 하면 먼저 배열 이 Oacle 에서 정의 하 는 방법 은 다음 과 같 습 니 다.
CREATE TYPE array_table AS TABLE OF VARCHAR2 (50); -- Array of String
CREATE TYPE array_int AS TABLE OF NUMBER;          -- Array of integers
다음 에 하나의 저장 과정 은 하나의 배열 의 입력 을 받 아들 이 고 하나의 배열 의 출력 은 다음 과 같다.

CREATE OR REPLACE PROCEDURE SchemaName.proc1 (p_array     IN     array_table,                                              len            OUT NUMBER,                                              p_arr_int      OUT array_int)AS   v_count 

  NUMBER;BEGIN   p_arr_int := NEW array_int (); 
  p_arr_int.EXTEND (10);   
len := p_array.COUNT; 
  v_count := 0;  
  FOR i IN 1 .. p_array.COUNT   LOOP    
  DBMS_OUTPUT.put_line (p_array (i));  
    p_arr_int (i) := v_count;   
   v_count := v_count + 1;  
 END LOOP;END;/

  그리고 JAVA 코드 입 니 다. 한 배열 로 들 어가 서 한 배열 의 출력 을 되 돌려 줍 니 다.

import java.math.BigDecimal;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Types;
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.internal.OracleTypes;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;  
public class TestDatabase {      
   public static void passArray()   
 {      
  try{   
                  Class.forName("oracle.jdbc.OracleDriver");        
              Connection con = DriverManager.getConnection("jdbc:oracle:thin:url ","UserName","Password");;                         String array[] = {"one", "two", "three","four"};      
                  
  ArrayDescriptor des = ArrayDescriptor.createDescriptor("SchemaName.ARRAY_TABLE", 
con);          
  ARRAY array_to_pass = new ARRAY(des,con,array);   
                      
CallableStatement st = con.prepareCall("call SchemaName.proc1(?,?,?)");           
           st.setArray(1, array_to_pass);             st.registerOutParameter(2, Types.INTEGER);            st.registerOutParameter(3,OracleTypes.ARRAY,"SchemaName.ARRAY_INT");  
        

  st.execute();               
          System.out.println("size : "+st.getInt(2));          
   // Retrieving array from the resultset of the procedure after execution -        

    ARRAY arr = ((OracleCallableStatement)st).getARRAY(3);           
  BigDecimal[] recievedArray = (BigDecimal[])(arr.getArray());         
    for(int i=0;i<recievedArray.length;i++)                System.out.println("element" + i + ":" + recievedArray[i] + "
"); } catch(Exception e) { System.out.println(e); } } public static void main(String args[]) { passArray(); } }

좋은 웹페이지 즐겨찾기