Dúvida de select no iReport

Olá pessoal, gostaria de saber se tem como eu validar um select dentro do ireport se não houver passagem de parametro… exemplo, eu tenho a seguinte query:

select distinct a.alu_matricula as MATRICULA_ALUNO,
p.pes_nome as NOME_ALUNO,
osa.osa_descricao as SITUACAO_ALUNO,
pr.prg_descricao as PROGRAMA_ALUNO,
a.alu_ecu_niv_tipo as NIVEL_ALUNO,
m.ima_ano || '.' || m.ima_periodo as PERIODO_TRANCADO
from prpg.interrupcoes_matricula m, prpg.alunos a, prpg.pessoas p,
prpg.observacoes_situacoes_alunos osa,
prpg.programas pr, prpg.niveis n
where a.alu_matricula = m.ima_alu_matricula --- juncao aluno - interrupcoes_matricula
and p.pes_cod_pessoa = a.alu_pes_cod_pessoa -- juncao aluno - pessoa
and osa.osa_cod_observacao = a.alu_obs_situacao_aluno -- juncao aluno - observacoes_situacoes_alunos
and a.alu_ecu_niv_tipo = n.niv_tipo -- juncao aluno - nivel
and a.alu_ecu_niv_prg_cod_programa = n.niv_prg_cod_programa -- juncao aluno - programa
and pr.prg_cod_programa = n.niv_prg_cod_programa -- juncao programa -  nivel
and m.ima_ano = $P{ano} -- :ano
and m.ima_periodo = $P{periodo} -- :periodo
and a.alu_ecu_niv_prg_cod_programa = $P{programa} -- : programa
and a.alu_ecu_niv_tipo = $P{nivel} -- :nivel
order by pr.prg_descricao, a.alu_ecu_niv_tipo, m.ima_ano || '.' || m.ima_periodo, p.pes_nome

ai se fosse eu chamando isso dentro de uma função, do oracle, se eu num passasse nenhum valor para o parametro programa, a função simplesmente chamaria todos os programas disponiveis daquele determinado ano, periodo e nivel… eu gostaria de saber se tem como eu validar isso numa query dentro do ireport… tipo… se o parametro programa não fosse preenchido, eu simplesmente desconsidararia a linha

and a.alu_ecu_niv_prg_cod_programa = $P{programa} -- : programa

e faria a consulta normal… tem como validar o select dentro do ireport dependendo dos parametros serem ou não passados?

tem uma parada de $#P{Parametro} ou $%P{Parametro} ou $!P{Parametro} alguma coisa assim

esse caractere a mais permite vc passar comandos para consulta ao inves de somente parametros entendeu??

pena que nao lembro o caracter… :oops: fiz isso ja tem um tempinho… :wink: foi mal

Oi Andre, eu entendi então que se eu usar esse caracter da forma que você disse, então vai estar ou não validando a linha correspondente ao que eu passar, é isso?
Exemplo… se eu não passo o parametro programa ele simplesmente ignora a parte do

and a.alu_ecu_niv_prg_cod_programa = $P{programa} – : programa

e faz a consulta normalmente… é isso?

Não funcionou com nenhum desses caracteres :cry:

tente $P!{var}

Olha… tou declarando os parametros como java.lang.String, todos
e tou fazendo o select assim:

and m.ima_ano = $P!{ano} -- :ano
and m.ima_periodo = $P!{periodo} -- :periodo
and a.alu_ecu_niv_prg_cod_programa = $P!{programa} -- : programa
and a.alu_ecu_niv_tipo = $P!{tipo} -- :nivel
order by pr.prg_descricao, a.alu_ecu_niv_tipo, m.ima_ano || '.' || m.ima_periodo, p.pes_nome

Aí dah: Error: SQL problems:ORA-00936: expressão não encontrada

[quote=samara]Olha… tou declarando os parametros como java.lang.String, todos
e tou fazendo o select assim:

and m.ima_ano = $P!{ano} -- :ano
and m.ima_periodo = $P!{periodo} -- :periodo
and a.alu_ecu_niv_prg_cod_programa = $P!{programa} -- : programa
and a.alu_ecu_niv_tipo = $P!{tipo} -- :nivel
order by pr.prg_descricao, a.alu_ecu_niv_tipo, m.ima_ano || '.' || m.ima_periodo, p.pes_nome

Aí dah: Error: SQL problems:ORA-00936: expressão não encontrada

[/quote]

coloque

and m.ima_ano = $P!{ano}

no lugar de

and m.ima_ano = $P!{ano} -- :ano

e o parametro ano ira conter o “-- :ano” sacou?

Oi andre… entendi sim… testei aqui mas continua dando o mesmo erro =
Num sei se é pq tou usando a versão mais nova do iReport… ou pq não é assim mesmo… =
Só sei que continuou no mesmo erro :frowning:

samara, eu fazia algo parecido com vc, veja minha idéia, (to usando MySQL, ok? Veja o caso para seu BD)

Suponhamos que sua variável ano seja do tipo int. Então, quando não quiser filtrar pelo ano, vc passa o valor dele como sendo 0, e faz assim no seu SQL:

No lugar que vc estava fazendo assim:

Entendeu a idéia?! Eu fiz um case na condição, ou seja, se o parâmetro vier como 0, ele não verifica a condição e retorna um true, se vier diferente de 0 ele faz a condição.

Espero ter ajudado!
Boa sorte! :wink: