Olá, estou com um problema numa consulta com banco de dados…
Uso banco Oracle, e tenho que gerar um relatório, onde imprima os funcionarios que entrarem após as 9:00 e que saia antes das 17:00 …
E quando clico no botão gerar relatório tenho o seguinte erro :
Ele não informa exatamente onde, mas sabe que o erro está no meu SELECT, só que no banco funciona perfeitamente!
esse é meu DAO, onde está o erro.
tenho também que converter meu hora de String pra hora . tentei com timestamp mas não deu muito certo …
[code]
public List horasFuncionarioPeriodo(Date dataInicio, Date dataFinal) throws ParseException {
List listaTotal = new ArrayList();
HorasFuncionarioPeriodo horasFunc = new HorasFuncionarioPeriodo();
SimpleDateFormat sf = new SimpleDateFormat(“dd/MM/yyyy”);
Session session = HibernateUtil.getSession();
try {
session.beginTransaction();
String hql = "SELECT f.sigla, f.nome, f.tipo, f.n_apropriacao, f.local, f.centroCusto" +
"f.Descricao, h.hora, h.dtDia as data, h.destino as registro";
hql += "FROM Funcionario f, Horario h";
hql += "WHERE h.dtDia BETWEEN :dataInicio AND :dataFinal";
hql += "AND to_date(h.hora, 'HH24:MI') > to_date('09:00', 'HH24:MI')";
hql += "AND to_date(h.hora, 'HH24:MI') < to_date('09:00', 'HH24:MI')";
//hql += "AND to_timestamp(h.hora, 'HH24:MI') > to_timestamp('09:00', 'HH24:MI')";
//hql += "AND to_timestamp(h.hora, 'HH24:MI') < to_timestamp('17:00', 'HH24:MI')";
hql += "AND flag_destino <> 'atestado'";
Query query = session.createQuery(hql);
query.setParameter("dataInicio", dataInicio);
query.setParameter("dataFinal", dataFinal);
for (Iterator it = query.iterate(); it.hasNext();) {
horasFunc = new HorasFuncionarioPeriodo();
Object[] registro = (Object[]) it.next();
horasFunc.setSigla(registro[0].toString());
horasFunc.setNome(registro[1].toString());
horasFunc.setTipo(registro[2].toString());
horasFunc.setN_apropriacao(Integer.parseInt(registro[3].toString()));
horasFunc.setLocal(registro[4].toString());
horasFunc.setCentroCusto(registro[5].toString());
horasFunc.setHora(registro[6].toString());
horasFunc.setData(sf.parse(registro[7].toString()));
horasFunc.setRegistro(registro[8].toString());
listaTotal.add(horasFunc);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
return listaTotal;
}[/code]
e esse é meu código do Banco .
select f.sigla,f.nome,f.tipo,f.n_apropriacao,f.local,f.centro_custo,f.descricao,
h.hora,h.dt_dia as data,h.destino as registro
from funcionario f, horario_unico h
where h.dt_dia between to_date(‘01/06/2011’, ‘DD/MM/YYYY’)
and to_date(‘03/06/2011’, ‘DD/MM/YYYY’)
and to_timestamp(h.hora, ‘HH24:MI’) > to_timestamp(‘09:00’, ‘HH24:MI’)
and to_timestamp(h.hora, ‘HH24:MI’) < to_timestamp(‘17:00’, ‘HH24:MI’)
and h.flag_destino <> ‘atestado’
Alguém pode me ajudar ?
Obrigado!