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?
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
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
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
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.