使用" SimpleJdbcCall"调用存储过程遇到错误java.lang.ClassCastException:weblogic .jdbc.wrapper.array_oracle_sql_Array

时间:2017-05-30 17:57:18

标签: spring plsql

Oracle类型:用户定义的数据类型

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;
    }

Spring Part:请求映射包含调用过程,其中In作为整数数组,而作为字符串数组

import requests
from bs4 import BeautifulSoup

def getArticle(url):
    url = 'http://www.bbc.com/news/business-34421804'
    result = requests.get(url)
    c = result.content
    soup = BeautifulSoup(c)

    article_text = ''
    article = soup.findAll('p')
    for element in article:
        article_text += '\n' + ''.join(element.findAll(text = True))
    return article_text

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:-1)

您还可以通过在服务 - >数据源 - >连接池 - &gt;高级:

下的WebLogic管理控制台中禁用“自动换行数据类型”选项来使其工作。