准确插入 date_from 和 date_to

Get exactly inserted date_from and date_to

我正在处理需要按日期过滤策略的应用程序。例如,如果用户输入 date_from:'21-jul-2017'date_to:'21-jul-2019',它应该显示在此期间创建的所有策略。

到目前为止我做了什么:

cursor o1 is 
 select substr(tarifa,1,2), count(*)
    from   pol p, uvod u, doppov d
    WHERE (izdavanje >=:prebacivanje.od)  AND (izdavanje<=:prebacivanje.do)
    and izdavanje>='01-jul-07'
    and p.orgjed = u.sorgz (+)
    and DATUM_PREKIDA is not null
    and p.polica=d.polica and d.pov_dopl='P'
    and d.status='F'
    and cisti_ao(p.polica)!=0 
    group by substr(tarifa,1,2);

:prebacivanje.od:prebacivanje.dodate_fromdate_to。两者都是数据库中的 DATE 字段。

因此我需要将此查询修改为 return 插入 date_fromdate_to 取决于用户输入的内容。

由于这是一个存在于表单中某处的游标,因此可能应该以某种方式执行该代码。是在您按下按钮时还是什么时候?

无论如何:尽管您从未说过问题是什么(您收到错误了吗?如果是,是哪一个?ORA-xxxxx、FRM-xxxxx?)(我猜查询没有return 随便什么),看来参数打扰你了。

查询 - 按原样 - 已正确编写。这些列的数据类型是 DATE - 这也是项目的数据类型。如果不是(而是 CHAR),则必须使用 TO_DATE 将其转换为 DATE,例如

 WHERE izdavanje >= to_date(:prebacivanje.od, 'dd-mon-yy')  
   AND izdavanje <= to_date(:prebacivanje.do, 'dd-mon-yy')
   AND izdavanje >= to_date('01-jul-07'     , 'dd-mon-yy')

为了确定使用哪种格式掩码,在 PL/SQL 过程的开头显示项目的值,使用 MESSAGE built-in:

declare
  cursor o1 is ...
begin
  message('od = ' || :prebacivanje.od);
  message('do = ' || :prebacivanje.do);

  ... the rest of your code goes here
end;

一般来说,最好的选择是确保数据类型匹配;否则,您必须注意转换或(更糟的是)依赖 Oracle 将尝试执行的隐式转换;有时会成功,有时不会。