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!
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…
(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!
Obrigado!
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:
- 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
- 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.