Oracle/JAVA - Tratamento de erros

6 respostas
gujlecar

Pessoal, tô precisando de uma ajuda por favor.
Vou explicar…
Eu fiz uma procedure no oracle e quero q essa procedure faça tratamento de erro e emita uma mensagem melhor para o usuário. Uso um campo de saída da procedure no caso OUT, do tipo varchar2. Se ocorrer algum problema, esse campo é preenchido e enviado ao usuário, caso contrário ele permanece como entrou, no caso NULO, porém ao chamar a procedure pelo java, o seguinte erro me aparece:

PLS-00363: expression ‘’ cannot be used as an assignmet target

Já agradeço desde então!
Brigadão!!

Lecar

6 Respostas

F

Olá,

Tu ta usando o parametro na procedure assim?

PROCEDURE minha_procedure( parametro OUT varchar2)

E esta passando ele na chamada no java?
Se eu entendi bem coloque o parametro como IN OUT.

PROCEDURE minha_procedure( parametro IN OUT varchar2)

Se não for isso, poste o código da procedure e a chamada que tu ta fazendo .

Bom, mas mesmo sem ver teu código eu acho que o erro não é no parametro de saida, verifica se tu não ta tentando preecnher um parametro que não foi expecificado como de saida.

]['s

brlima

Só por curiosidade, e sobre o RAISE_APPLICATION_ERROR() ?
Aí vc poderiar tratar realmente como um erro no código java, e não como um retorno. :smiley:

flw!

Rafael_Steil

Eh. De fato, o melhor seria dar um raise_application_error() com algum codigo especifico, ou mesmo o raise(), o que acabaria raindo no tratamenteo de exceptions do Java. Entao, com base na mensagem / codigo de erro ( por exemplo, -23456, ou “DataNotValidException” ), voce pega a “mensagem amigavel” de um arquivo de configuracao.
Isso eh melhor que harcodear no .java ou no banco.

Rafael

F

Olá,

Relamente eu prefiro retornar um raise tb, deixa tudo no Java.
E sobre o erro que ele aponto não tem nada a ver com as mensagens retornadas e sim com erro do PL/SQL.

]['s

gujlecar

Eu de novo....
galera, como sou novo no java, ainda não saco algumas classes. Olha o q eu fiz:

/*Código no JAVA*/
            StringBuffer chamaproc = new StringBuffer();
            chamaproc.append("{ call proc_clientes_inc('");
            chamaproc.append(jTextField1.getText());
            chamaproc.append("','");
            chamaproc.append(jTextField2.getText());
            chamaproc.append("','");
            chamaproc.append(msg_erro);
            chamaproc.append("')}");
            String s = chamaproc.toString();
            CallableStatement cs = c.prepareCall(s);
            cs.executeUpdate();
/*PROCEDURE ORACLE*/
CREATE OR REPLACE PROCEDURE PROC_CLIENTES_INC
(
v_nom_cliente   IN  clientes.nom_cliente%TYPE,
v_end_cliente   IN  clientes.end_cliente%TYPE,
v_tel_cliente   IN  clientes.tel_cliente%TYPE,
v_nom_cidade    IN  cidade.nom_cidade%TYPE,
v_sig_estado    IN  estado.sig_estado%TYPE,
v_msg_erro      IN OUT VARCHAR2
----*-----
  IF v_nom_cliente IS NULL THEN
    RAISE e_nom_cli_null;
  END IF;
----*-----
EXCEPTION
  WHEN e_nom_cli_null THEN
    v_msg_erro := 'O nome do cliente é obrigatório. Preencha a informação solicitada';
  ROLLBACK;
END PROC_CLIENTES_INC;
)
gujlecar

Pessoal,
consegui! Eu dei uma olhada nesse site aki. Muito Bom!

[url]http://javaalmanac.com/egs/java.sql/CallProcedure.html?l=rel[/url]

Pelo q eu entendi, o negócio funciona assim:

/*Trecho do código funcionando*/

           CallableStatement cs = c.prepareCall("{ call       proc_clientes_inc(?,?,?,?,?,?) }");
            cs.setString(1,jTextField1.getText());
            cs.setString(2,jTextField2.getText());
            cs.setString(3,jTextField3.getText());
            cs.setString(4,jComboBox1.getSelectedItem().toString());
            cs.setString(5,jComboBox2.getSelectedItem().toString());
            cs.setString(6,msg_erro);
            cs.registerOutParameter(6, java.sql.Types.VARCHAR);
            cs.executeUpdate();
            outparam = cs.getString(6);

Agradeço a ajuda de todos q postaram aki!! VALEU!!!

Lecar

Criado 22 de julho de 2004
Ultima resposta 26 de jul. de 2004
Respostas 6
Participantes 4