使用当年的PLSQL

时间:2019-07-18 06:44:14

标签: sql oracle plsql

我想查看当年所有真实的政策。 这意味着如果用户输入2017,则需要搜索2017年发布的策略(“ 2017年1月1日至2017年12月31日”) 如果用户输入2016,则需要搜索2016年发布的策略(“ 2016年1月1日至2016年12月31日”) 继续。 从图片中可以看到,所有这些数据都需要存储在excel文件中,该文件必须包含11行和2列(塔里法,计数)

    select substr(tarifa,1,2),count(*)
from   pol p, uvod u, doppov d
where  (datum_dop >=sysdate)  AND (datum_dop<=sysdate)
and izdavanje>=sysdate
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)

enter image description here

运行此查询时,出现错误no rows selected 但是在修改了该查询并输入year之后,我仅获得10列2行

select substr(tarifa,1,2),count(*)
from   pol p, uvod u, doppov d
where  (datum_dop >='1-jan-12')  AND (datum_dop<='31-dec-13')
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)


SU   COUNT(*)
-- ----------
01        188
02         29
04          1
05          1
06          4
07          3
08          1
10          2

但是我需要获得11列2行。 我不知道我在哪里犯了错误以及我做错了什么。 谁能帮我,拜托! ! !我会非常感谢 干杯! ! !

源代码过程

PROCEDURE OTKAZANE IS

application OLE2.OBJ_TYPE;
workbooks OLE2.OBJ_TYPE;
workbook OLE2.OBJ_TYPE;
worksheets OLE2.OBJ_TYPE;
worksheet OLE2.OBJ_TYPE;
cell OLE2.OBJ_TYPE;
range OLE2.OBJ_TYPE;
range_col OLE2.OBJ_TYPE;

args OLE2.LIST_TYPE;
VRIJEDNOST VARCHAR2(500);

form_name VARCHAR2(100);
f_block VARCHAR2(100);
l_block VARCHAR2(100);
f_item VARCHAR2(100);
l_item VARCHAR2(100);
cur_item VARCHAR2(100);

item_name VARCHAR2(100);
baslik VARCHAR2(100);
row_n NUMBER;
col_n NUMBER;
filename VARCHAR2(100);
BROJAC NUMBER:=0;

/*Otkazane police u bilo kojem periodu */

cursor o1 is 

select substr(tarifa,1,2),count(*)
from   pol p, uvod u, doppov d
where  (datum_dop >='1-jan-12')  AND (datum_dop<='31-dec-13')
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)



BEGIN       
message('huhu');

END;

更新

COUNT(DISTINCTSUBSTR(TARIFA,1,2))
---------------------------------
                                1
                                1
                                1
                                1
                                1

1 个答案:

答案 0 :(得分:4)

什么是datum_dop,它是DATE列吗?因为您正在将其与包含日期的字符串进行比较。仅通过比较年份,可能会最适合您。将where子句改写为:

WHERE EXTRACT(YEAR FROM datum_dop) = my_year_input

或者,如果您有两个输入作为开始日期和结束日期。

WHERE datum_dop BETWEEN my_start_date AND my_end_date

但是请始终确保这些日期实际上是日期,如果不存在,请使用适当的格式进行TO_DATE。