1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Concatenar funções Oracle.

Estou utilizando na minha aplicação Java o CriteriaBuilder para realizar as consultas ao banco de dados( Oracle ). Nessa minha aplicação, no front, tenho uma opção de "pesquisar" onde a informação ali inserida pode ser compatível com qualquer coluna(codigo+nome+col2.... like texto_inserido_no_pesquisar). Um dos campos que é exibido é tratado por uma função criada no banco, então eu preciso concatenar esse retorno junto para realizar a busca.

O problema: Quando concateno uma função a sintaxe esta sendo trocado, ou seja, concateno MINHA_FUNCAO(PARM1, PARM2) + OUTRA_COLUNA, e a expressão fica: MINHA_FUNCAO(PARM1 || PARM2) || OUTRA_COLUNA.

Detalhe: Se eu realizar essa operação com uma função do banco, TO_CHAR por exemplo, funciona corretamente. Aparentemente o problema é ao utilizar funções criadas apenas.

Abaixo exemplo com to_char e função própria:

//Cria expressão para utilizar TO_CHAR
Expression<String> dateStringExpr = cb.function("TO_CHAR", String.class, r.get("prcDatInativ"),
                            cb.literal("'dd/mm/yyyy'"));

//Cria outra expressão para utilizar uma função criada no banco                    
Expression<String> funcaoExpr = cb.function("f_minha_funcao",String.class,cb.literal("parametro1"),r.get("prcIndTabelaProc"));

p = cb.and(p, cb.like(cb.concat(dateStringExpr, funcaoExpr)
    ,"%" + queryParams.getFirst("search").toString().toUpperCase() + "%"));

Resultado: A função to_char ficou correta, os dois parâmetros ficaram separados por uma vírgula. A outra função teve a vírgula trocado pelo símbolo de concatenação(||). Deve ser feito algo a mais quando se usa uma função própria?

where 1 = 1
           and (to_char(proc0_.PRC_DAT_INATIV, ?) ||
               f_minha_funcao(? || proc0_.PRC_IND_TABELA_PROC) || ? like ?)
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java oracle ou faça a sua própria pergunta.