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
PROCEDUREminha_procedure( parametro OUT varchar2)
E esta passando ele na chamada no java?
Se eu entendi bem coloque o parametro como IN OUT.
PROCEDUREminha_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.
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
fabio.patricio
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:
/*PROCEDUREORACLE*/CREATEORREPLACEPROCEDUREPROC_CLIENTES_INC(v_nom_clienteINclientes.nom_cliente%TYPE,v_end_clienteINclientes.end_cliente%TYPE,v_tel_clienteINclientes.tel_cliente%TYPE,v_nom_cidadeINcidade.nom_cidade%TYPE,v_sig_estadoINestado.sig_estado%TYPE,v_msg_erroINOUTVARCHAR2----*-----IFv_nom_clienteISNULLTHENRAISEe_nom_cli_null;ENDIF;----*-----EXCEPTIONWHENe_nom_cli_nullTHENv_msg_erro:='O nome do cliente é obrigatório. Preencha a informação solicitada';ROLLBACK;ENDPROC_CLIENTES_INC;)
gujlecar
Pessoal,
consegui! Eu dei uma olhada nesse site aki. Muito Bom!