Entao, acontece q estou com um grande problema na query.
Tenho uma tela q há varios parametros e um deles é data. Na tela o usuario preeenche um ou mais campos para pesquisa, os quais serão enviados para a proc.
O problema é q qdo o parametro data é nulo, a query não respeita os outros parametros, ou seja, não adianta colocar na query:
and ( a.ds_impacto = p_rec_tam_issues.ds_impacto or p_rec_tam_issues.ds_impacto is null)
and ( a.dt_issue = p_rec_tam_issues.dt_issue or p_rec_tam_issues.dt_issue is null);
se o usuario informar somente o ds_impacto a query teria q retornar e ignorar o parametro data nulo.
Você pode tratar como abaixo se é que entendi sua dúvida.
[code]StringBuffer sql = new StringBuffer();
sql.append(" and ( a.ds_impacto = p_rec_tam_issues.ds_impacto “);
sql.append(” or p_rec_tam_issues.ds_impacto is null)" );
sql.append(" and ( a.dt_issue = p_rec_tam_issues.dt_issue “);
if (dt_issue != null) {
sql.append(” or p_rec_tam_issues.dt_issue is null" );
}
sql.append(" ) ");[/code]
se o usuario informar ds_impacto e o mesmo for diferente de p_rec_tam_issues.ds_impacto vai fazer com que sua instrução falhe, porque essa comparacao vai retornar false ja que os valores são diferentes, e a segunta expressão tambem vai retornar false ja que ds_impacto nao eh nulo.
como a segunda expressão (and ( a.dt_issue = p_rec_tam_issues.dt_issue or p_rec_tam_issues.dt_issue is null) vc usa um AND ela nem vai ser testada ja que false AND qualquer outra coisa eh false. entendeu?
tente mudar o seu AND para OR que resolve. algo assim:
a.ds_impacto = p_rec_tam_issues.ds_impacto or a.dt_issue = p_rec_tam_issues.dt_issue
perguntei se era oracle porque ele tem uma particulariadade quando se compara valores nulos.
[quote=izaura]A proc ta ok. Já fiz teste e ela retorna os registros mesmo com a data não informada. O problema é no java mesmo.
A lista volta com size zero, mesmo a proc retornando 4 registros.
[/quote]
o problema nao eh se a data for nula, o problema eh que se a.ds_impacto for diferente de p_rec_tam_issues.ds_impacto e a.ds_impacto não for nula. se isso acontecer sua expressão falha.
isso sempre vai acontecer ja seus metodos fromJava e toJava sempre criam novos objetos os deixando diferente de nulo, porem com valores incompativeis com a sua base.
Pessoal, sou novo no Fórum, será que alguém poderia me ajudar com situação abaixo?
As datas quando não preenchidas no relatório não está trazendo nenhum registro, sendo que era para trazer quando NULL
AND ((TRUNC (HPE.DT_INICIO_UTILIZACAO) BETWEEN :DT_INICIO_DE AND :DT_INICIO_ATE) OR (TRUNC (HPE.DT_INICIO_UTILIZACAO) IS NULL))
AND ((TRUNC (HPE.DT_FIM_UTILIZACAO) BETWEEN :DT_FIM_DE AND :DT_FIM_ATE) OR (TRUNC (HPE.DT_FIM_UTILIZACAO) IS NULL))
Olá Mauricio!
Entao, acontece q estou com um grande problema na query.
Tenho uma tela q há varios parametros e um deles é data. Na tela o usuario preeenche um ou mais campos para pesquisa, os quais serão enviados para a proc.
O problema é q qdo o parametro data é nulo, a query não respeita os outros parametros, ou seja, não adianta colocar na query:
and ( a.ds_impacto = p_rec_tam_issues.ds_impacto or p_rec_tam_issues.ds_impacto is null)
and ( a.dt_issue = p_rec_tam_issues.dt_issue or p_rec_tam_issues.dt_issue is null);
se o usuario informar somente o ds_impacto a query teria q retornar e ignorar o parametro data nulo.[/quote]
[quote=fcpassos]Pessoal, sou novo no Fórum, será que alguém poderia me ajudar com situação abaixo?
As datas quando não preenchidas no relatório não está trazendo nenhum registro, sendo que era para trazer quando NULL
AND ((TRUNC (HPE.DT_INICIO_UTILIZACAO) BETWEEN :DT_INICIO_DE AND :DT_INICIO_ATE) OR (TRUNC (HPE.DT_INICIO_UTILIZACAO) IS NULL))
AND ((TRUNC (HPE.DT_FIM_UTILIZACAO) BETWEEN :DT_FIM_DE AND :DT_FIM_ATE) OR (TRUNC (HPE.DT_FIM_UTILIZACAO) IS NULL))
Olá Mauricio!
Entao, acontece q estou com um grande problema na query.
Tenho uma tela q há varios parametros e um deles é data. Na tela o usuario preeenche um ou mais campos para pesquisa, os quais serão enviados para a proc.
O problema é q qdo o parametro data é nulo, a query não respeita os outros parametros, ou seja, não adianta colocar na query:
and ( a.ds_impacto = p_rec_tam_issues.ds_impacto or p_rec_tam_issues.ds_impacto is null)
and ( a.dt_issue = p_rec_tam_issues.dt_issue or p_rec_tam_issues.dt_issue is null);
se o usuario informar somente o ds_impacto a query teria q retornar e ignorar o parametro data nulo.[/quote][/quote]