我正在一个需要按日期筛选策略的应用程序中。例如,如果用户输入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_from
和date_to
。两者都是数据库中的DATE字段。
因此,我需要修改此查询以根据输入的用户返回插入的date_from
和date_to
。
答案 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将尝试执行的隐式转换;有时它会成功,有时却不会。