nandolup,
Não estou usando Prepared Statement.
O mais correto não seria usar o Callabe Statement.
Segue o trecho mais importante da minnha função PL/SQL
CREATE OR REPLACE FUNCTION F_Operador_Valido
(P_Operador IN OPERADORES.OPE_COD_OPERADOR%TYPE,
P_Nome IN OUT OPERADORES.OPE_NOME%TYPE,
P_Senha IN OUT OPERADORES.OPE_SENHA%TYPE)
Return Char
IS
BEGIN
…
RETURN (‘1’);
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN (‘0’);
WHEN OTHERS THEN
B_Gerais.R_Grava_Log (USER, ‘F_Operador_valido’, SQLCODE, ‘00000000’);
RETURN (‘0’);
END;
Tenho uma classe LoginUsuario, com um método AutorizaLogin, cujo código é :
public boolean AutorizaLogin(String operador, String senha) {
query = new StringBuffer();
query.append("{ call prpg_testes.F_OPERADOR_VALIDO(?,?,?)}");
conexao = null;
cstmt = null;
retorno1 = "";
retorno2 = "";
try {
// conexao
conexao = acesso.obtemConexao();
cstmt= conexao.prepareCall(query.toString());
cstmt.setString(1, operador);
cstmt.setString(2, senha);
cstmt.registerOutParameter(2,Types.VARCHAR);
cstmt.registerOutParameter(3,Types.VARCHAR);//retorna um varchar
cstmt.execute();
retorno1=cstmt.getString(2);
retorno2=cstmt.getString(3);
JOptionPane.showMessageDialog(null,"Nome : " + retorno1);
JOptionPane.showMessageDialog(null,"Senha : " + retorno2);
return true;
} catch (SQLException ex) {
ex.printStackTrace();
return false;
}
E criei uma classe TestaLoginUsuario, onde, definido um objeto da classe supracitada, estou chamando o método acima da seguinte forma :
…
public static void main(String[] args) {
LoginUsuarioDAO login = new LoginUsuarioDAO();
//login.ExecutaConsulta();
if (login.AutorizaLogin("12345678","posgrad2")) {
JOptionPane.showMessageDialog(null, "Acesso AUTORIZADO");
} else {
JOptionPane.showMessageDialog(null, "Acesso NÃO AUTORIZADO");
}
}
}
Aí aparece a seguinte mensagem de erro :
init:
deps-jar:
compile-single:
run-single:
Conexão efetuada com sucesso
Conexão efetuada com sucesso
java.sql.SQLException: ORA-06550: linha 1, coluna 7:
PLS-00221: ‘F_OPERADOR_VALIDO’ não é um procedimento ou está indefinido
ORA-06550: linha 1, coluna 7:
PL/SQL: Statement ignored
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:215)
at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:954)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1168)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3390)
at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4223)
at persistencia.LoginUsuarioDAO.AutorizaLogin(LoginUsuarioDAO.java:95)
at persistencia.TestaLoginUsuarioDAO.main(TestaLoginUsuarioDAO.java:34)
EXECUTADO COM SUCESSO (tempo total: 3 segundos)
Será que vc poderia me ajudar ?
Agradece,
Max