Pessoal, boa tarde!
Pesquisei aqui no forum, e até achei algo relacionado mais não tão de acordo com o que eu preciso, por isso abri esse tópico, pois o outros era de 2006.
Estou tentadno executar um procedure, com o método que eu criei abaixo e estou tendo esse erro: ORA-01008: not all variables bound
Alguém pode dar um help no que pode ser, a principio está tudo ok, com a chamada da procedure certo?
public ResultSet setDadosCsl(BigDecimal cnl, String sigla_loc, String uf, BigDecimal solic) throws SQLException{
Connection con = null;
CallableStatement proc = null;
ResultSet rs = null;
try {
con = ConnectionFactorySQLOracle.getInstance().getConnection();
// logger.info("Vai EXECUTAR A SP: pkg_localidade_aten.pesquisa_localidade");
proc = con.prepareCall("{call PKG_LOCALIDADE_ATEN.pesquisa_localidade(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) }");
//Entrada
proc.setBigDecimal(1, cnl);
proc.setString(2, sigla_loc);
proc.setString(3, uf);
proc.setBigDecimal(4, solic);
//Saida
proc.registerOutParameter(1, OracleTypes.NUMBER);
proc.registerOutParameter(2, OracleTypes.NUMBER);
proc.registerOutParameter(3, OracleTypes.VARCHAR);
proc.registerOutParameter(4, OracleTypes.VARCHAR);
proc.registerOutParameter(5, OracleTypes.VARCHAR);
proc.registerOutParameter(6, OracleTypes.VARCHAR);
proc.registerOutParameter(7, OracleTypes.VARCHAR);
proc.registerOutParameter(8, OracleTypes.VARCHAR);
proc.execute();
//logger.info("EXECUTOU A SP: pkg_localidade_aten.pesquisa_localidade");
//Retrorno um resultSet com os dados
rs = (ResultSet) proc.getObject(1);
} finally {
try {
proc.close();
con.close();
}catch (SQLException ex) {
con.close();
logger.info("############################ SQLException ATECSL01 ##############################");
logger.info("SQLException : " + ex.getMessage());
logger.info("########################## FIM SQLException ATECSL01 ##############################");
}
}
return rs;
}
seus outs devem seguir a ordem:
//Entrada
proc.setBigDecimal(1, cnl);
proc.setString(2, sigla_loc);
proc.setString(3, uf);
proc.setBigDecimal(4, solic);
//Saida
proc.registerOutParameter(5, Types.NUMERIC);
proc.registerOutParameter(6, Types.NUMERIC);
proc.registerOutParameter(7, Types.VARCHAR);
proc.registerOutParameter(8, Types.VARCHAR);
proc.registerOutParameter(9, Types.VARCHAR);
proc.registerOutParameter(10, Types.VARCHAR);
proc.registerOutParameter(11, Types.VARCHAR);
proc.registerOutParameter(12, Types.VARCHAR);
proc.execute();
//considerando que o '1' agora é o 5
rs = (ResultSet) proc.getObject(5);
Entendi, fiz a alteração!
public ResultSet setDadosCsl(BigDecimal cnl, String sigla_loc, String uf, BigDecimal solic) throws SQLException{
Connection con = null;
CallableStatement proc = null;
ResultSet rs = null;
try {
con = ConnectionFactorySQLOracle.getInstance().getConnection();
// logger.info("Vai EXECUTAR A SP: pkg_localidade_aten.pesquisa_localidade");
proc = con.prepareCall("{call PKG_LOCALIDADE_ATEN.pesquisa_localidade(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) }");
//Entrada
proc.setBigDecimal(1, cnl);
proc.setString(2, sigla_loc);
proc.setString(3, uf);
proc.setBigDecimal(4, solic);
//Saida
proc.registerOutParameter(5, OracleTypes.NUMBER);
proc.registerOutParameter(6, OracleTypes.NUMBER);
proc.registerOutParameter(7, OracleTypes.VARCHAR);
proc.registerOutParameter(8, OracleTypes.VARCHAR);
proc.registerOutParameter(9, OracleTypes.VARCHAR);
proc.registerOutParameter(10, OracleTypes.VARCHAR);
proc.registerOutParameter(11, OracleTypes.VARCHAR);
proc.registerOutParameter(12, OracleTypes.VARCHAR);
proc.execute();
//logger.info("EXECUTOU A SP: pkg_localidade_aten.pesquisa_localidade");
//Retrorno um resultSet com os dados
rs = (ResultSet) proc.getObject(1);
} finally {
try {
proc.close();
con.close();
}catch (SQLException ex) {
con.close();
logger.info("############################ SQLException ATECSL01 ##############################");
logger.info("SQLException : " + ex.getMessage());
logger.info("########################## FIM SQLException ATECSL01 ##############################");
}
}
return rs;
}
O Erro agora é esse ?
Throwable : ORA-06550: line 1, column 7:
PLS-00201: identifier ‘PKG_LOCALIDADE_ATEN.PESQUISA_LOCALIDADE’ must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
Quando executa a procedure na mão no PL/SQL, ela roda normalmente trazendo os resultados.
Ou a PKG não existe, ou tá faltando um GRANT pra ela:
Brigado meu amigo, você matou o problema!
Grande abraços!