Chamar uma package do Oracle com hibernate

4 respostas
donny

Boa noite,

Preciso chamar, usando hibernate, uma função de uma package (Oracle) onde devo passar 4 parametros. A package irá retornar 7 campos com valores.

Alguém poderia me orientar nisso?

Desde já agradeço pela atenção.

Att,

4 Respostas

R

Para executar a package, creio que você vai ter de usar o método Connection.prepareCall():

http://download.oracle.com/javase/6/docs/api/java/sql/Connection.html#prepareCall(java.lang.String)
http://www.enterprisedt.com/publications/oracle/result_set.html

Para obter uma Connection no Hibernate, use Session.connection() ou Session.doWork():

http://docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/Session.html#connection()
http://docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/Session.html#doWork(org.hibernate.jdbc.Work)

donny

Obrigado pelas dicas Roger!

donny

Bom dia,

Ao chamar uma package do Oracle para executar uma procedure está dando o erro:

java.sql.SQLException: ORA-06550: line 1, column 41:
PLS-00103: Encountered the symbol "" when expecting one of the following:

   := . ( % ;
The symbol "(" was substituted for "" to continue.
ORA-06550: line 1, column 63:
PLS-00103: Encountered the symbol ";" when expecting one of the following:

   . ( ) , * @ % & | = - + < / > at in is mod remainder not
   range rem => .. <um expoente (**)> <> or != or ~= >= <= <>
   and or like LIKE2_ LIKE4_ LIKEC_ betw

	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:1169)
	at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
	at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3329)
...

Essa procedure espera 4 parametros de entrada e retorna 7 colunas com os dados, conforme o código abaixo:

PROCEDURE STATUS_BOTAO (P_ID_SITUACAO_FLUXO  IN NUMBER
                       ,P_CD_SEQUENCIA_FLUXO IN NUMBER
                       ,P_CD_BASE_CLIENTE    IN NUMBER
                       ,P_CD_CGC_CPF         IN NUMBER
                       ,P_CD_USUARIO         IN VARCHAR2
                       ,P_BT_ENVIAR_ANALISE  OUT NUMBER
                       ,P_BT_EXCECAO         OUT NUMBER
                       ,P_BT_APROVAR         OUT NUMBER
                       ,P_BT_REPROVAR        OUT NUMBER
                       ,P_ID_STATUS          OUT NUMBER
                       ,P_BT_COMPLEMENTAR    OUT NUMBER
                       ,P_DS_STATUS          OUT VARCHAR2) IS
  WW_ID_VERIFICA        NUMBER(1);-- 0 para Não e 1 para Sim
  WW_CD_SEQUENCIA_FLUXO NUMBER(10);
  WW_ID_FIM_FLUXO       NUMBER(10); 
  WW_ID_EXCECAO         NUMBER(10);
  WW_ID_COMPLEMENTO     NUMBER(10);
  WW_ID_FINALIZA_RPV    NUMBER(10);
  WW_ID_MUDA_APROVADOR  NUMBER(10);

Abaixo o código Java.

ResultSet res = stored.executeQuery();//Aqui ocorre o erro.

Alguém tem alguma sugestão?

Obrigado.

donny

Resolvi da seguinte forma:

stored.execute();

//Para pegar o valores
int primeiro = stored.getInt(1);
...

Muito obrigado a todos que me ajudaram!

Criado 19 de maio de 2011
Ultima resposta 20 de mai. de 2011
Respostas 4
Participantes 2