Chamada PLSQL, Function , Grails & groovy
05/11/2015 11:18
0
Bom dia Pessoal

Sei que não tem muito haver com grails, mas alguém saberia informar uma maneira de fazer uma chamada a uma função do oracle sem ser dessa maneira?

 def session = sessionFactory.openSession()
def query = session.createSQLQuery("SELECT FCT_CMD_FECHAR_BLOQ(:equipamento, :parada) FROM DUAL")


Preciso chamar a função sem colocar Select from dual, e somente chamando a função não da certo!!!

Existe algo no grails que facilite essas chamadas?
Tags: Calling PLSQL, Function , Grails & groovy


0
                 
                Desta forma  funciounou!!!

                 Connection conn = dataSource.getConnection()
                   Sql sql = new Sql(conn)

sql.call("DECLARE V_RETORNO CLOB; BEGIN V_RETORNO := FCT_CMD_ABRIR_BLOQ(?,?,?); END;",[equipamento,parada,sentido]) { row -> resultado=row}


0
Oi Rafael, bacana, mas preste atenção em um ponto.

Se você estiver obtendo esta conexão em um serviço, esta conexão não estará dentro do mesmo contexto transacional que este. Sendo assim, se você se encontrar em uma situação do tipo:


  executa ação 1
  executa ação 2
   obtém a conexão tal como você expos
  executa ação 3


O seu método não fará parte da mesma transação que as ações 1, 2 e 3
Pode ser que tenha ocorrido alguma mudança de lá pra cá (talvez o data source fornecer uma conexão por thread, o que evitaria o problema acima), mas sempre leve isto em consideração, ok?


0
Na verdade eu tenho serviços disponibilizados no webservices e cada um deles  chama uma função. O serviço chama a função Oracle e retorna um xml para quem o consumiu. Não tenho nenhuma outra utilidade para eles. Tem algum problema se for desta forma?

@Transactional(readOnly = true)
def zerarBloqueio(Integer equipamento, Integer parada, lacreUm, lacreDois){
def resultado
Connection conn = dataSource.getConnection()
Sql sql = new Sql(conn) 
   sql.call("DECLARE V_RETORNO CLOB; BEGIN V_RETORNO := FCT_CMD_ZERAR_REC_BLOQ(?,?,?,?); END;",[equipamento,parada,lacreUm,lacreDois]) { row -> resultado=row}
return  resultado
}

@Transactional(readOnly = true)
def coletarBloqueio(Integer equipamento, Integer parada){
def resultado
Connection conn = dataSource.getConnection()
Sql sql = new Sql(conn)
 
sql.call("DECLARE V_RETORNO CLOB; BEGIN V_RETORNO := FCT_CMD_COLETAR_BLOQ(?,?); END;",[equipamento,parada]) { row -> resultado=row}
return  resultado
}


0
A logica está nas funções oracle!


0
Henrique!

Você sabe me dizer qual seria a opção mais favorável no meu caso!


0
Oi Rafael,

se é uma ação isolada, ou seja, se você apenas precisa executar esta stored procedure e nada mais, a solução que você adotou está ok.



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto