-1

我正在一个需要按日期过滤策略的应用程序中工作。例如,如果用户输入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 字段。

所以我需要修改这个查询以返回插入的date_fromdate_to取决于用户输入的内容。

在此处输入图像描述

4

1 回答 1

0

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

无论如何:虽然你从来没有说过问题是什么(你得到一个错误吗?如果是这样,哪个?ORA-xxxxx,FRM-xxxxx?)(我的猜测是查询没有返回任何东西),似乎参数麻烦你。

查询 - 按原样 - 正确编写。这些列的数据类型是DATE- 这也是项目的数据类型。如果不是(而是 a CHAR),则必须将其转换为DATEusing TO_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内置的:

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

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

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

于 2019-07-16T12:27:41.250 回答