Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RenataFA

Jasper -> passar SQL em tempo de execução

Recommended Posts

Boa tarde,

 

Imaginem que tenho um relatorio.jasper. Esse relatorio.jasper tem a seguinte instrução SQL:

 

 

"select * from tabela where campo = $P{parCodigo}"

 

 

E antes de eu chamar esse relatorio.jasper durante a execução do meu programa, eu passava o valor correspondente ao parCodigo.

 

Tudo funciona certinho. O problema é que agora, por motivos não tão simples de explicar, eu preciso passar o SQL inteiro como parâmetro. Então fiz isso:

 

 

parSQL = "Select * from tabela where campo = $P{parCodigo}";

parCodigo = 1; // por exemplo

 

Ou seja, criei dois parâmetros e não apenas um como era antes. Agora antes de chamar meu relatorio.jasper eu passo esses dois parâmetros. No lugar lá no jasper onde tem que colocar a instrução SQL do relatório eu apenas coloquei o $P!{parSQL}.

 

Eu esperava que o jasper soubesse como substituir isso, eu achava que ele encontraria o $P{parSQL} e substituiria ele por "Select * from tabela where campo = $P{parCodigo}". E depois ele verificaria novamente, encontraria o $P{parCodigo} e substituiria por 1. Só que não é o que ele faz na prática!

 

O que percebo é que ele verifica a primeira vez e troca o $P!{parSQL} pela instrução passada. Depois ele executa direto, sem verificar denovo se ainda existem novos parâmetros para serem substituidos. Pra funcionar, ele teria que fazer de forma recursiva a substituição dos parâmetros. Mas ele não faz!

 

 

Minha questão é se alguém sabe alguma outra forma de passar uma instrução SQL para o jasper em tempo de execução sem ser através de parâmetros (que foi o que eu tentei e não funcionou). Ou se alguém sabe uma forma de fazer com que ele substitua todos os parâmetros e não apenas o primeiro nível deles.

 

Sei que talvez muitos estejam pensando: Pq você já não coloca o valor do parCodigo na instrução e manda um parâmetro só assim "select * from tabela where campo = 1". Bem, isso não é algo simples de explicar,,, posso dizer que para o meu caso isso é impossível, usei este exemplo simples para tentar transmitir o problema, mas no caso real não dá para fazer desta forma.

 

 

Agradeço qq. ajuda!

 

 

[]'s, Renata

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe a demora pra responder...Eu consegui resolver meu problema usando Scriptlets. Eu passo o SQL como parâmetro e através de Scriptlets eu modifico o conteúdo deste parâmetro em tempo de execução, trocando algum outro parâmetro interno pelo valor correspondente.De qq forma obrigada pela atenção!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.