Chamar function usando jpa

564 views
Skip to first unread message

Jose Maria Bezerra Junior

unread,
Nov 9, 2012, 2:18:10 PM11/9/12
to jav...@googlegroups.com
Pessoal,
Estou tentando chamar uma função no banco de dados oracle que me retorna uma mensagem de erro caso ocorra.
Tentei assim:
String sql = " SELECT pkcarsal_funcional.efetiva_alt_funcional("+idAlteracao+", "+u.getId()+") FROM DUAL ";
Query q = entityManager
.createNativeQuery(sql);
Ele da o seguinte erro:
17:07:58,125 ERROR [stderr] (http--127.0.0.1-8080-4) Caused by: java.sql.SQLException: ORA-14552: cannot perform a DDL, commit or rollback inside a query or DML 
17:07:58,125 ERROR [stderr] (http--127.0.0.1-8080-4) ORA-06512: at "CARSAL.PKCARSAL_FUNCIONAL", line 49
17:07:58,126 ERROR [stderr] (http--127.0.0.1-8080-4) ORA-00957: duplicate column name

Tentei assim:
String sql = "  CALL pkcarsal_funcional.efetiva_alt_funcional("+idAlteracao+", "+u.getId()+") ";
E assim:
String sql = "  pkcarsal_funcional.efetiva_alt_funcional("+idAlteracao+", "+u.getId()+") ";

De todas as maneira não estou conseguindo.

Alguém pode me ajuda?
Obrigado.

Marcus Vinícius

unread,
Nov 10, 2012, 9:50:29 AM11/10/12
to jav...@googlegroups.com
Tente colocando  as chaves. Exemplo: { call suaFunction(:idAlteracao, :id) } .

Atenciosamente,

Marcus Vinícius Mesquita Leite
MBA, CAPM, CSM, OCJP


2012/11/9 Jose Maria Bezerra Junior <juni...@gmail.com>

--
Você está recebendo esta mensagem porque se inscreveu no grupo "java.ce" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para jav...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para javace+un...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/javace?hl=pt-BR.

Paulo Gomes

unread,
Nov 12, 2012, 1:20:48 PM11/12/12
to jav...@googlegroups.com
Acredito que esse erro seja dentro da sua função no Oracle/PL/SQL. Analize a sua function, se quiser poste o código da sua function.

Jose Maria Bezerra Junior

unread,
Nov 11, 2012, 8:26:42 PM11/11/12
to jav...@googlegroups.com
Obrigado pela ajuda.
O único jeito foi usando JDBC usando CallStatemant.
Porque a function retornava uma varchar que eu tinha que receber no java.
Ficou assim:

CallableStatement clstAddRel =     
conn.prepareCall(" ? = pkcarsal_funcional.efetiva_alt_funcional(?,?) ");    
clstAddRel.registerINParameter(1, Types.VARCHAR); 
clstAddRel.registerOutParameter(2, Types.INTEGER); 
Reply all
Reply to author
Forward
0 new messages