sexta-feira, 3 de dezembro de 2010

Cláusula IN e Querys Inteiras da aplicação para o IReport

Pra variar só uma dica rápida no blog. Se você tem uma aplicação e precisa usar a clausula IN no IReport deve ter feito algo assim e encontrou dificuldades


SELECT
     table.`row` AS table_row,
FROM
     `table` table
WHERE
     table.`row` IN  ($P{ROW})

Vi que algumas pessoas em fóruns por aí apanhando com isso.
A solução é MUITO simples. Aprendemos a inserir parâmetros como $P{ROW} onde ROW é o nome do meu parâmetro. O problema é que quando tentamos usar a cláusula IN desejamos passar algo como ('v1','v2'...) ou seja uma lista de parâmetros. Para isso dar certo a QUERY SQL deve ser escrita assim:

SELECT
     table.`row` AS table_row,
FROM
     `table` table
WHERE
     table.`row` IN  ($P!{ROW})

A diferença para quem não percebeu foi a '!' entre o 'P' e a '{'.

Se você quer montar sua QUERY SQL inteira na aplicação e passa-la ao IReport em tempo de execução deve usar o mesmo conceito. Acredito que hajam soluções melhores do que passar a QUERY inteira em tempo de execução, mas quem quer começar a usar o IReport e encontrar alguma dificuldade com campos mais complexos deve se lembrar dessa exclamação, porque ela faz TODA a diferença.

Um comentário: