`
qingzi2534
  • 浏览: 257894 次
  • 性别: Icon_minigender_2
  • 来自: 烟台
社区版块
存档分类
最新评论

不知道我的存储过程写的好不好?

阅读更多
不知道这样写存储过程,是不是不够优化?
  1. create or replace function F_GET_WORK_DAYS_COLOR   
  2. (   
  3.   in_begin_date  DATE,   
  4.   in_end_date    DATE,   
  5.   in_first_days  number,   
  6.   in_second_days number   
  7.  )   
  8. return varchar2 is  
  9.   
  10. /*=========================================================   
  11. 功能:去掉休息日,去工作日,   
  12. 说明:传入日期 和 工作日天数,返回到期时间   
  13. 创建:   
  14. 修改:   
  15. 时间:2006-12-12   
  16. =========================================================*/   
  17.   
  18. v_color        varchar(20);   
  19. v_days         number(6);   
  20. --v_exception Exception;   
  21.   
  22.   
  23.   
  24. begin  
  25.   
  26.   
  27.  select count(1)    
  28.    into v_days    
  29.    from ZX_CALENDAR_AND_REST z   
  30.   where z.calendar_day >= trunc(in_begin_date)   
  31.     and z.calendar_day <= trunc(in_end_date)   
  32.     and z.rest_flag = 'N';   
  33.   
  34.   if v_days  > in_first_days and v_days  <= in_second_days then  
  35.      v_color := 'yellow';   
  36.   elsif v_days  > in_second_days  then  
  37.      v_color :=  'red';   
  38.   else  
  39.      v_color := 'white';   
  40.   end if;   
  41.   
  42.   return v_color;   
  43.   
  44. exception   
  45.   when others then  
  46.     rollback;   
  47.    -- p_pub_error_log(v_result, sqlcode, sqlerrm, 'sf_f_note_issue_confirm');   
  48.     return sysdate;   
  49. end;   
  1. create or replace function F_ZX_WORK_SHEET_VERIFY_NOTICES(   
  2.   begin_day   date,   
  3.   end_day     date,   
  4.   v_operator  varchar2,   
  5.   stat_bureau varchar2)   
  6. return integer is  
  7.  ------------------------------------------------------------------------------------------   
  8.  -- 功能:工单通告预警   
  9.  -- 参数:当前日期   
  10.  -- 创建: 2007-1-24   
  11.  -- 修改:   
  12.  ------------------------------------------------------------------------------------------   
  13.   
  14.  v_day     date;   
  15.  v_end_day date;   
  16.  v_busi    varchar2(8);   
  17.  v_result  integer;   
  18. begin  
  19.   v_day := sysdate ;   
  20.   v_busi := stat_bureau;   
  21.   v_end_day := end_day;   
  22.   --初使化v_busi   
  23.     if v_busi = '%' then  
  24.        v_busi := 'TT';   
  25.     end if;   
  26.      --清除已经发布的内容   
  27.   v_result := -10;   
  28.   delete from ZX_WORK_SHEET_VERIFY_NOTICES h   
  29.   where h.start_day   = begin_day and  
  30.         h.end_day     = v_end_day and  
  31.         (h.STAT_BUREAU = v_busi or h.bureau_code = v_busi);    --新加的列,统计单位   
  32.    dbms_output.put_line('liuhui');   
  33.    --插入数据   
  34.    v_result := -20;   
  35. if v_busi = 'TT' then    
  36.   insert into ZX_WORK_SHEET_VERIFY_NOTICES   
  37.   (   
  38.     NOTICE_LEVEL ,   
  39.     NOTICE_DAY   ,   
  40.     SHEET_NUM   ,   
  41.     SHEET_RATE   ,   
  42.     RATE_NUM     ,   
  43.     REMARK      ,   
  44.     BUREAU_CODE ,   
  45.     OPERATOR    ,   
  46.     DATA_TIME   ,   
  47.     START_DAY   ,   
  48.     END_DAY     ,   
  49.     STAT_BUREAU )   
  50.    SELECT DECODE(W.COLOR,'red',1,'yellow',2,3),   
  51.           v_day,   
  52.           W.NUM,   
  53.           0,   
  54.           0,   
  55.           DECODE(W.COLOR,'red','非常严重','yellow','严重',''),   
  56.           W.BUREAU_CODE,   
  57.           v_operator ,   
  58.           v_day,   
  59.           begin_day ,   
  60.           v_end_day ,   
  61.           v_busi   
  62.     FROM  
  63.    (select count(1)  NUM,   
  64.            z.bureau_code   BUREAU_CODE,   
  65.    max(F_GET_WORK_DAYS_COLOR(z.confirm_date,decode(z.back_verify_date,'',sysdate,z.back_verify_date),3,13))  COLOR   
  66.      from ZX_WORK_SHEET_VERIFY z   
  67.      where F_GET_WORK_DAYS_COLOR(z.confirm_date,decode(z.back_verify_date,'',sysdate,z.back_verify_date),3,13) <> 'white'   
  68.      and z.confirm_sign = 'Y' and z.app_date between begin_day and v_end_day  and (z.error_type <> '0' or z.error_type is not null)   
  69.      group by z.bureau_code,F_GET_WORK_DAYS_COLOR(z.confirm_date,decode(z.back_verify_date,'',sysdate,z.back_verify_date),3,13)   
  70.      ORDER BY COLOR,NUM ) W;   
  71. ELSE  
  72.      
  73.   insert into ZX_WORK_SHEET_VERIFY_NOTICES   
  74.   (   
  75.     NOTICE_LEVEL ,   
  76.     NOTICE_DAY   ,   
  77.     SHEET_NUM   ,   
  78.     SHEET_RATE   ,   
  79.     RATE_NUM     ,   
  80.     REMARK      ,   
  81.     BUREAU_CODE ,   
  82.     OPERATOR    ,   
  83.     DATA_TIME   ,   
  84.     START_DAY   ,   
  85.     END_DAY     ,   
  86.     STAT_BUREAU )   
  87.    SELECT DECODE(W.COLOR,'red',1,'yellow',2,3),   
  88.           v_day,   
  89.           W.NUM,   
  90.           0,   
  91.           0,   
  92.           DECODE(W.COLOR,'red','非常严重','yellow','严重',''),   
  93.           W.BUREAU_CODE,   
  94.           v_operator ,   
  95.           v_day,   
  96.           begin_day ,   
  97.           v_end_day ,   
  98.           v_busi   
  99.     FROM  
  100.    (select count(1)  NUM,   
  101.            z.bureau_code   BUREAU_CODE,   
  102.    max(F_GET_WORK_DAYS_COLOR(z.confirm_date,decode(z.back_verify_date,'',sysdate,z.back_verify_date),3,13))  COLOR   
  103.      from ZX_WORK_SHEET_VERIFY z   
  104.      where F_GET_WORK_DAYS_COLOR(z.confirm_date,decode(z.back_verify_date,'',sysdate,z.back_verify_date),3,13) <> 'white'   
  105.      and z.confirm_sign = 'Y' and z.app_date between begin_day and v_end_day  and (z.error_type <> '0' or z.error_type is not null)   
  106.      group by z.bureau_code,F_GET_WORK_DAYS_COLOR(z.confirm_date,decode(z.back_verify_date,'',sysdate,z.back_verify_date),3,13)   
  107.      ORDER BY COLOR,NUM ) W    
  108.      WHERE W.BUREAU_CODE = v_busi;   
  109.   end if;   
  110.   ------合计   
  111.   v_result := -30;   
  112. IF v_busi = 'TT' then  
  113.   insert into ZX_WORK_SHEET_VERIFY_NOTICES   
  114.   (   
  115.     NOTICE_LEVEL ,   
  116.     NOTICE_DAY   ,   
  117.     SHEET_NUM   ,   
  118.     SHEET_RATE   ,   
  119.     RATE_NUM     ,   
  120.     REMARK      ,   
  121.     BUREAU_CODE ,   
  122.     OPERATOR    ,   
  123.     DATA_TIME   ,   
  124.     START_DAY   ,   
  125.     END_DAY     ,   
  126.     STAT_BUREAU )   
  127.    SELECT DECODE(t.notice_level,'',3,t.notice_level),   
  128.           v_day,   
  129.           sum(nvl(t.sheet_num,0)),   
  130.           '',   
  131.           max(0),   
  132.           max(t.remark),   
  133.           'TT'  ,   
  134.           v_operator ,   
  135.           v_day,   
  136.           begin_day ,   
  137.           v_end_day ,   
  138.           v_busi   
  139.     from  ZX_WORK_SHEET_VERIFY_NOTICES t   
  140.    where t.start_day = begin_day   
  141.      and t.end_day   = v_end_day   
  142.      and t.bureau_code <> v_busi    
  143.      and t.stat_bureau = v_busi    
  144.    group by rollup(t.notice_level);   
  145.   
  146. end if;   
  147.   
  148.   ----工单超期率 不包括天津的   
  149.     v_result := -40;   
  150. if v_busi = 'TT' then    
  151.     update ZX_WORK_SHEET_VERIFY_NOTICES  B   
  152.        set (B.SHEET_RATE) = (select round(decode((select count(*) from ZX_WORK_SHEET_VERIFY z    
  153.                               where z.app_date between begin_day and v_end_day   
  154.                                 and z.bureau_code = a.bureau_code    
  155.                                 and (z.confirm_date <> date'1900-1-1' or z.confirm_date is not null)),0,0,   
  156.                             (select sum(c.SHEET_NUM) from ZX_WORK_SHEET_VERIFY_NOTICES c   
  157.                               where c.bureau_code  = a.bureau_code    
  158.                                 and a.notice_level = c.notice_level   
  159.                                 and b.start_day    = c.start_day    
  160.                                 and c.end_day      = b.end_day and c.bureau_code <> v_busi and    
  161.                                 c.stat_bureau = v_busi )   
  162.                                 /   
  163.                              (select count(*) from ZX_WORK_SHEET_VERIFY z   
  164.                                where z.app_date between begin_day and v_end_day   
  165.                                  and z.bureau_code  = a.bureau_code    
  166.                                  and (z.confirm_date <> date'1900-1-1' or z.confirm_date is not null))),4)*100   
  167.                                 from ZX_WORK_SHEET_VERIFY_NOTICES a    
  168.                                WHERE A.BUREAU_CODE  = B.BUREAU_CODE    
  169.                                  AND A.NOTICE_LEVEL = B.NOTICE_LEVEL   
  170.                                  and b.start_day    = a.start_day    
  171.                                  and a.end_day      = b.end_day    
  172.                                  and a.bureau_code <> v_busi AND A.STAT_BUREAU = B.STAT_BUREAU);    
  173.                                    
  174. else    
  175.     update ZX_WORK_SHEET_VERIFY_NOTICES  B   
  176.        set (B.SHEET_RATE) = (select round(decode((select count(*) from ZX_WORK_SHEET_VERIFY z    
  177.                               where z.app_date between begin_day and v_end_day   
  178.                                 and z.bureau_code = a.bureau_code    
  179.                                 and (z.confirm_date <> date'1900-1-1' or z.confirm_date is not null)),0,0,   
  180.                             (select sum(nvl(c.SHEET_NUM,0)) from ZX_WORK_SHEET_VERIFY_NOTICES c   
  181.                               where c.bureau_code  = a.bureau_code    
  182.                                 and a.notice_level = c.notice_level   
  183.                                 and b.start_day    = c.start_day    
  184.                                 and c.end_day      = b.end_day    
  185.                                 )   
  186.                                 /   
  187.                              (select count(*) from ZX_WORK_SHEET_VERIFY z   
  188.                                where z.app_date between begin_day and v_end_day   
  189.                                  and z.bureau_code  = a.bureau_code    
  190.                                  and (z.confirm_date <> date'1900-1-1' or z.confirm_date is not null))),4)*100   
  191.                                 from ZX_WORK_SHEET_VERIFY_NOTICES a    
  192.                                WHERE A.BUREAU_CODE  = B.BUREAU_CODE    
  193.                                  AND A.NOTICE_LEVEL = B.NOTICE_LEVEL   
  194.                                  and b.start_day    = a.start_day    
  195.                                  and a.end_day      = b.end_day    
  196.                                  and a.bureau_code = v_busi AND A.STAT_BUREAU = B.STAT_BUREAU);    
  197. end if;   
  198.   -----排名   
  199.     v_result := -50;   
  200. if v_busi = 'TT' then    
  201.      update ZX_WORK_SHEET_VERIFY_NOTICES  B   
  202.         set (B.RATE_NUM) = (select r.row_num   
  203.                            FROM (   
  204.                            SELECT row_number () over (PARTITION by z.NOTICE_LEVEL order by z.SHEET_RATE asc) row_num,   
  205.                                   Z.BUREAU_CODE , Z.NOTICE_LEVEL   
  206.                            FROM ZX_WORK_SHEET_VERIFY_NOTICES Z where  
  207.                              begin_day = z.start_day and v_end_day = z.end_day and z.notice_level <> 3 AND Z.BUREAU_CODE <> v_busi   
  208.                              AND Z.STAT_BUREAU = v_busi    
  209.                            ) r   
  210.                             WHERE r.BUREAU_CODE = B.BUREAU_CODE AND r.NOTICE_LEVEL = B.NOTICE_LEVEL  );    
  211.  else update ZX_WORK_SHEET_VERIFY_NOTICES  B   
  212.         set (B.RATE_NUM) = '';   
  213. end if;   
  214.      commit;   
  215.      return 0;   
  216.    exception   
  217.      when others then  
  218.      begin  
  219.        rollback ;   
  220.      P_PUB_ERROR_LOG(v_result,sqlcode,sqlerrm,'F_ZX_WORK_SHEET_VERIFY_NOTICES');   
  221.      return v_result;   
  222.      end;   
  223. END;   
分享到:
评论
1 楼 sprite 2007-02-03  
哈哈 比我强。我还没写过存储过程呢!学习ing...

相关推荐

    万育606普通玉米品种好不好?.doc

    植株在生长过程中通常有20片左右的叶子,显示出良好的生长活力。其果穗呈现筒形,穗长大约17.9厘米,穗行数稳定在14-16行,穗轴为红色,籽粒类型为半马齿型,颜色饱满。每100粒的重量约为36.7克,出籽率高达86.0%,...

    asp.net SQL存储过程分页

    ASP.NET SQL 存储过程分页是...通过创建合适的存储过程,正确配置ASP.NET的控件,以及处理好分页事件,我们可以构建出高效且用户友好的数据展示页面。在实际开发中,应不断学习和优化这些技巧,以适应不同场景和需求。

    MySQL存储过程练习[收集].pdf

    MySQL 存储过程实践指南 MySQL 存储过程是 MySQL 数据库中的一种程序化对象,它允许用户根据...通过这些实验,我们可以更好地理解和掌握 MySQL 存储过程的概念、语法格式和使用方法,从而提高数据库的性能和安全性。

    pic蕊片解码方法,不知道好不好用,试试吧

    描述中提到的“没有用过,不知道好不好用”,这可能是用户对于特定的解码工具或技术的初次尝试。在实际应用中,选择合适的解码工具至关重要,因为不同的工具可能有不同的兼容性、效率和易用性。 标签中的“解码方法...

    动态数组 自己写的 不知好不好 欢迎提点意见

    但是,自定义动态数组可以作为学习过程的一部分,帮助理解内存管理、动态分配和增长策略等概念。下面我们将深入探讨动态数组的基本原理及其可能的实现方式。 动态数组的核心特性包括: 1. **动态扩展**:当数组满...

    自己动手写操作系统(含源代码).part2

    我虽然已经有多年不写代码了,但看这本书的时候,让我又重新感受到做程序员的乐趣:用代码建设属于自己的系统,让电脑听从自己的指令,对系统的每个部分都了如指掌。 黑客(hacker)实际是褒义词,维基百科的解释是...

    自己动手写操作系统(含源代码).part1

    我虽然已经有多年不写代码了,但看这本书的时候,让我又重新感受到做程序员的乐趣:用代码建设属于自己的系统,让电脑听从自己的指令,对系统的每个部分都了如指掌。 黑客(hacker)实际是褒义词,维基百科的解释是...

    知心招聘源码,这是我的毕业设计,写得不好。.zip

    知心招聘源码是一款基于Web的招聘管理系统,用于模拟企业招聘流程和求职者应聘过程。在这款毕业设计中,开发者可能涵盖了多个IT领域的知识点,包括前端开发、后端开发、数据库设计以及用户交互等。虽然作者自谦地...

    注册表路径跳转工具,好不好,自己用一下试试

    注册表是Windows系统中的核心数据库,存储着系统和应用程序的各种配置信息,包括软件设置、硬件设备信息、用户设置等。通常,通过“regedit”命令或者“运行”对话框来访问注册表编辑器,但这种方式往往需要在层次...

    GWT(很好的资料和书籍不好你打我)

    标题“GWT(很好的资料和书籍不好你打我)”可能是在幽默地强调GWT的相关资源虽然优秀,但可能不容易找到,特别是高质量的书籍。这提示我们,尽管GWT是一个强大的工具,但学习资源的获取可能会有一些挑战。 描述中...

    我的代泊员

    "我的代泊员"是一款由上海泊友慧信息技术有限公司开发的应用程序,专注于提供停车代泊服务。这款项目的核心目标是为用户提供便捷、安全的车辆停放解决方案,尤其在城市中的繁忙地段,用户可以通过此应用轻松找到专业...

    Bandicam录屏.zip

    Bandicam采用高效的压缩算法,即便在高分辨率下录制,文件大小也能得到很好的控制,减少了存储空间的需求。同时,压缩后的视频在画质上几乎无损,保持了原始的清晰度。 **6. 图形处理单元(GPU)加速** 为了提高...

    存储管理的页面置换算法详解 (2).pdf

    优缺点:OPT 算法因为要需要预先知道一个进程在整个运行过程中页面走向的全部情况,因此只是一种理想状态,实际是不可能实现的。但是,它可以作为一种衡量其他算法优劣的标准。 页面置换算法是存储管理的重要组成...

    M250L JS写3G工具

    在描述中提到“不好弄了”,这可能意味着该工具的使用过程可能较为复杂,或者由于某些原因(如版本更新、API变动或技术支持减少)使得操作变得困难。 标签同样为"M250L JS写3G工具",进一步强调了这个主题是关于...

    DB2学习手册

    1. **建存储过程时Create后一定不要用TAB键:** 在编写存储过程时,使用`CREATE`命令后直接输入存储过程内容,避免使用TAB键,以免引起语法错误。 2. **使用临时表:** 临时表用于存储临时数据,在存储过程执行完毕后...

    RAM与ROM测试方法.docx

    本身工作在辐射环境里/运输过程中受到辐射(如过海关时被X光机检查)。长时间存放导致存储失效,某些0、1位自行翻转。无论如何,在硬件上存放的程序都是不可靠的。如果完全不能运行,那到也不会造成太大的损失。怕就...

    DB2使用经验积累及心得

    - **ATOMIC及NOT ATOMIC区别**:`ATOMIC`表示整个存储过程作为一个不可分割的操作执行;`NOT ATOMIC`则允许多个操作同时发生。 - **C及SQL存储过程名称都要注意长度**:遵循DB2对象名称长度限制。 - **怎样获得自己...

Global site tag (gtag.js) - Google Analytics