Erro CallableStatement Java Stored Procedure

Olá, meu primeito tópico aqui

Estou com o seguinte problema:

Estou trabalhando com o JDeveloper and Oracle10g, e tenho uma Java Stored Procedure que está chamando outra JavaSP dentro dela de acordo com o código abaixo:


int sd = 0;


try{
CallableStatement clstAddRel = 
conn.prepareCall(" {call FC_RJS_INCLUIR_RELACAO_PRODCAT(?,?)} ");
clstAddRel.registerOutParameter(1, Types.INTEGER);
clstAddRel.setString(1, 
  Integer.toString(id_produto_interno));
clstAddRel.setString(2, ac[i].toString());
clstAddRel.execute();

sd = clstAddRel.getInt(1);

}catch(SQLException e){
String sqlTeste3 = 
"insert into ateste values (SQ_ATESTE.nextval, ?)";
PreparedStatement pstTeste3 = 
conn.prepareStatement(sqlTeste3);
pstTeste3.setString(1,"erro: "+e.getMessage()+ ac[i]);
pstTeste3.execute();
pstTeste3.close();
}

Estou gravando o erro em uma tabela chamada ATESTE, e a mensagem gravada é: “Conflito de tipo de parâmetro”…

A função “FC_RJS_INCLUIR_RELACAO_PRODCAT”, como dito, é uma Java Stored Procedure também, já está exportada para o Oracle, e retorna um int,

Eu tentei também o código abaixo, mas dá o mesmo erro:


                            try{
                            OracleCallableStatement clstAddRel = 
                                (OracleCallableStatement)conn.prepareCall(" {call FC_RJS_INCLUIR_RELACAO_PRODCAT(?,?)} ");
                            clstAddRel.registerOutParameter(1, OracleTypes.NUMBER);
                            clstAddRel.setString(1, 
                                                 Integer.toString(id_produto_interno));
                            clstAddRel.setString(2, ac[i].toString());
                            clstAddRel.execute();

                            sd = clstAddRel.getInt(1);
                            
                            }catch(SQLException e){
                                String sqlTeste3 = 
                                    "insert into ateste values (SQ_ATESTE.nextval, ?)";
                                PreparedStatement pstTeste3 = 
                                    conn.prepareStatement(sqlTeste3);
                                pstTeste3.setString(1,"erro: "+e.getMessage()+ ac[i]);
                                pstTeste3.execute();
                                pstTeste3.close();
                            }

Alguém poderia me dizer o que estou fazendo de errado?

E se você registrar o seu parametro de saida:

Com o tipo especifico e depois pegar o retorno assim:

Ainda continua gerando o mesmo erro…

o SQL gerado pelo JDeveloper para criação desta function no Oracle é este:


CREATE OR REPLACE FUNCTION fc_rjs_incluir_relacao_prodcat(p1 IN VARCHAR2, p2 IN VARCHAR2) RETURN NUMBER AUTHID CURRENT_USER AS LANGUAGE JAVA NAME 'produtoCategoria.rjsProdutoCategoria.FC_RJS_INCLUIR_RELACAO_PRODCAT(java.lang.String, java.lang.String) return int';
/

ou seja, ele está retornando um NUMBER mesmo, apesar de, no Java, estar retornando um inteiro.

esta function no java está assim:


    public static int FC_RJS_INCLUIR_RELACAO_PRODCAT(String codigo_interno, String categoria_interno) throws Exception {
    
        int retorno;
        
        ProdutoCategoriaSoapClient myPort;
        
        
        myPort = new ProdutoCategoriaSoapClient();
        ClsSoapHeader oSoap = new ClsSoapHeader();
        oSoap.setA1("");
        oSoap.setA2("");
        
        try{
            myPort.incluirCodigoInterno(oSoap, 0, codigo_interno, categoria_interno);
            retorno = 1;
        }catch(Exception erro) {
            retorno = 0;
        }
        
        return retorno;
        
        
    }

Então deve ser os parametros que você esta passando, de uma olhada para ver se estão certos.

Teve um post antigo aqui no Forum que fala desse problema http://www.guj.com.br/posts/list/20419.java

problema resolvido!

estava passando o parâmetro ‘registerOutParameter(1, Types.INTEGER)’ com a posição 1, sendo que na procedure ele era o último parâmetro. foi só passar para ‘registerOutParameter(3, Types.INTEGER)’ que funcionou…