2017-05-30 34 views
0

Oracle類型:用戶定義的數據類型使用 「SimpleJdbcCall時」 調用存儲過程中遇到錯誤java.lang.ClassCastException:weblogic的.jdbc.wrapper.array_oracle_sql_Array

create or replace type id_array_input VARRAY(20) OF NUMBER 

create or replace type output_data_array VARRAY(20) OF VARCHAR(25) 

程序 存儲過程來調用

CREATE OR REPLACE PROCEDURE TESTPROC(id_array in id_array_input,output_data out output_data_array) 

as 

declare 

doc_name varchar2(55); 

begin 

    output_data:=output_data_array(); 
    for i in 1..id_array.count loop 
    select document_name into doc_name from document_details where doc_id =id_array(i); 
    output_data.extend; 
    output_data(i):=doc_name; 

end loop; 
end; 
end TESTPROC; 

春季部分:包含呼叫請求映射與在程序作爲一個整數數組,輸出,串

@Autowired 
private JdbcTemplate jdbcTemplate; 
private SimpleJdbcCall proceCall; 

public void setDataSource(DataSource dataSource) { 
this.jdbcTemplate = new JdbcTemplate(dataSource); 
} 
@RequestMapping(value="/procedure",method=RequestMethod.GET,produces=MediaType.APPLICATION_JSON_UTF8_VALUE) 
    public @ResponseBody Object getProcedure(){ 

     List<Integer> aa_array=new ArrayList<Integer>(); 
     aa_array.add(10); 
     aa_array.add(20); 
     aa_array.add(30); 

     Integer[] int_array=new Integer[aa_array.size()]; 
     int_array=aa_array.toArray(int_array); 

     proceCall=new SimpleJdbcCall(jdbcTemplate).withProcedureName("TESTPROC") 
       .declareParameters(new SqlParameter("id_array",OracleTypes.ARRAY,"id_array_input"), 
            new SqlOutParameter("output_data",Types.ARRAY,"output_data_array" ,new SqlReturnArray())); 
     Map in = Collections.singletonMap("id_array",new SqlArrayValue(int_array)); 
     Map<String,Object> st_array=proceCall.execute(String[].class,in); 
     return st_array; 
    } 
+0

我恐怕不知道Java,但程序無效。丟失'聲明'和兩個'末端'之一。 –

+0

我已經在聲明中添加了分號,它現在會編譯。 – Chirag

回答

-1

你也可以把它用在服務 - 禁用「自動換行數據類型」選項,在WebLogic管理控制檯>數據來源 - >連接Pool->高級工作:

0

在你的榜樣陣列,異常是因爲new SqlReturnArray()到來。請參閱以下代碼。這將工作。

procedureCall=new SimpleJdbcCall(jdbctemplate.getDataSource()).withProcedureName("TESTPROC")     
       .declareParameters(new SqlParameter("id_array",OracleTypes.ARRAY, "COMPANY_COMMITTEE_ID_ARRAY") 
         ,new SqlOutParameter("output_data",Types.ARRAY, "STRING_ARRAY")); 

     aa_array=alpha.toArray(aa_array); 
     Map in =Collections.singletonMap("id_array",new SqlArrayValue(aa_array));  

     Array hi= procedureCall.executeFunction(Array.class,in); 
     String[] hh=(String[]) hi.getArray();