oracle视图创建参数

本文详细介绍了在数据库中如何通过创建参数包来动态设置查询的时间范围,并使用这些参数在视图中筛选和汇总投诉数据。通过具体代码示例,展示了参数包的定义与实现,以及如何在视图中运用这些参数进行复杂的数据筛选。
1.定义包:
create or replace package Complaint_volume_pro_param is
    --参数一
    function set_StartTimeStr(str varchar2) return varchar2;
    function get_StartTimeStr return varchar2;
    --参数二
    function set_EndTimeStr(str varchar2) return varchar2;
    function get_EndTimeStr return varchar2;
end Complaint_volume_pro_param;
2.定义包体
create or replace package body Complaint_volume_pro_param is
    startTimeStr varchar2(20);
    endTimeStr varchar2(20);
    -- startTimeStr
    function set_StartTimeStr(str varchar2) return varchar2 is
    begin
        startTimeStr := str;
        return str;
    end;

    function get_StartTimeStr return varchar2 is
    begin
        return startTimeStr;
    end;
    -- endTimeStr
    function set_EndTimeStr(str varchar2) return varchar2 is
    begin
        endTimeStr := str;
        return str;
    end;

    function get_EndTimeStr return varchar2 is
    begin
        return endTimeStr;
    end;

end Complaint_volume_pro_param;

3.视图中运用
create or replace view Complaint_volume_pro
as
select pc.PNAME,
       pc.PCODE,
       case
           when pc.PCODE in ('600101', '600204', '600301', '600104', '600201', '600105', '600103', '600202', '600203', '600102')
               then '南方大省'
           when pc.PCODE in
                ('600305', '600401', '600205', '600402', '600404', '600403', '600303', '600304', '600302', '600405', '600406')
               then '南方小省'
           when pc.PCODE in ('609903', '609905', '609906', '609904', '609001', '609908', '609907', '609902', '609910', '609909')
               then '北方省'
           end                      area,
       substr(t.ARCHIVE_DATE, 0, 6) month,
       substr(t.ARCHIVE_DATE, 0, 8) daily,
       case
           when to_number(substr(substr(t.ARCHIVE_DATE, 0, 8), 5, 2)) < 4 then '1'
           when to_number(substr(substr(t.ARCHIVE_DATE, 0, 8), 5, 2)) < 7 then '2'
           when to_number(substr(substr(t.ARCHIVE_DATE, 0, 8), 5, 2)) < 10 then '3'
           when to_number(substr(substr(t.ARCHIVE_DATE, 0, 8), 5, 2)) >= 10 then '4'
           end                      quarter,
       count(1)                     nums,
       '0'                          status
from COMPLAINT_WORKSHEET_FULL_NEW t
         left join PROVINCE_CONFIGURE pc on t.SRCSYSID = pc.PCODE
where substr(t.ARCHIVE_DATE, 0, 8) >=
      Complaint_volume_pro_param.get_StartTimeStr()
  and substr(t.ARCHIVE_DATE, 0, 8) <=
      Complaint_volume_pro_param.get_EndTimeStr()
group by substr(t.ARCHIVE_DATE, 0, 8), substr(t.ARCHIVE_DATE, 0, 6), pc.PCODE, pc.PNAME;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值