[RESOLVIDO] iReport - Query com WHERE condicional

Olá amigos! Estou desenvolvendo um relatório onde pegarei um WHERE condicional. Estou fazendo a query dentro do relatório.
Quando utilizo where x = $P{parametro} está tudo OK. Mas neste caso eu gostaria que meu WHERE fosse um parametro, e não apenas o VALOR da condição. Até porque poderei ter várias condições… Pois bem, tentei de várias formas e dá erros. SE alguém puder ajudar agradeço! :smiley:

tente assim

select *********** from *****  $P!{WHERE}

dai na aplicação vc faz

parameter.put("WHERE", "where sapo = coelho")

Tentei assim:

Select campos
from tabela
where $P{clausula_where}

(Erro que dá é "“ORA-00920: invalid relational operator”)

Com seu comentário, adicionei o ! na “clausula_where”…
Não funciona… :frowning:
(Erro que dá é "Please set a default value for the parameter ‘clausula_where’)

lembra de colocar um valor padrao a clausula

“where sapo = coelho”

nunca passei como parametro o where, essa é minha primeira vez

mas já passei muito sql por parametro

Opa, sempre passo como parametro tb xD
Funcionou, não precisei setar valor default.
A questão é: o erro apareceu na hora da escrita da cláusula, mas quando tentei gerar FUNCIONOU! :smiley:
Obrigado! :stuck_out_tongue:

hehehehehe, o erro na escrita é porque nao tem nada como padrão.

mas passando por parametro vc troca o padrão pelo valor passado e funciona na boa.

qualquer pergunta é so gritar

[quote=andrestrindade] Olá amigos! Estou desenvolvendo um relatório onde pegarei um WHERE condicional. Estou fazendo a query dentro do relatório.
Quando utilizo where x = $P{parametro} está tudo OK. Mas neste caso eu gostaria que meu WHERE fosse um parametro, e não apenas o VALOR da condição. Até porque poderei ter várias condições… Pois bem, tentei de várias formas e dá erros. SE alguém puder ajudar agradeço! :D[/quote]

Como ja foi citado anteriormente vc pode utilizar parametros utilizando o ! para o valor do parametro não receba scape mas cuidado isso deixa a aplicação muito fragil. Alguem pode mandar uma string do tipo “; drop table usuarios” e ai vai fu… com seu banco.

Nunca use parametros setados pelo usuario sem scape diretamente na consulta $P!{parametro}.

Quando preciso fazer where condicional na consulta faço assim:

  1. crio um parametro auxiliar que vai receber um valor testado de um parametro principal, ex:

new String($P{cursosId}.equals(“0”) ? " 1 " : " cursosId = "+$P{cursosId})

O exemplo acima é o valor padrao de um parametro chamado cursoId2 que vai receber o valor do cursoId dependendo do valor que foi enviado ao parametro cursoId

  1. na consulta eu faço assim:

select * from cursos where **** and $P!{cursoId2}

Utilizando conjunto de parametros principal e auxiliar vc vai conseguir tornar a consulta flexivel e ainda manter a segurança contra sql injection.

A explicação foi meio vaga mas se precisar de detalhes basta perguntar. Boa sorte. :smiley: