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 vc 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