获取准确插入的date_from和date_to

时间:2019-07-16 11:59:54

标签: sql oracle plsql oracleforms oracle8

我正在一个需要按日期筛选策略的应用程序中。例如,如果用户输入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.do分别是date_fromdate_to。两者都是数据库中的DATE字段。

因此,我需要修改此查询以根据输入的用户返回插入的date_fromdate_to

enter image description here

1 个答案:

答案 0 :(得分:1)

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

无论如何:尽管您从未说过问题出在哪里(是否得到错误?如果是,是哪个错误?ORA-xxxxx,FRM-xxxxx?)(我猜是查询什么都不会返回)。这些参数困扰您。

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

为了确保使用哪种格式掩码,请使用内置的MESSAGE在该PL / SQL过程的开头显示项目的值:

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

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

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