`
qingzi2534
  • 浏览: 254659 次
  • 性别: 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...

相关推荐

    人事管理表格 触发器存储过程

    这个是学校课程设计周使用的表格,表格是一个系统的关键,所以这张表,整整修改了两个星期才完成。主要是在触发器这个过程,因为触发器就像一把刀,使用的好很好用,使用不好,它很容易让系统崩溃。

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

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

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

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

    swing开发的数据库工具(DBAnywhere4.76),是开发mis系统的好帮手

    swing开发的数据库管理工具,支持常用的几大主流数据库,其他数据库可以自己扩展添加(只要有此数据库jdbc驱动的jar包就行),可以查看用户表(数据可导出成Excel),主键,索引,视图,触发器,存储过程等,可以生成对表增,删...

    系统维护 很好的一个绿色软件 云端

    那软件的一些相关文件和注册表并不写在真实的系统环境中,确实是全面绿色化。这项通过。 2. 软件下载到使用一键完成,免安装 体验:这点就是前面下QQ体验过的,还是比较流畅的,就不说了。 3. 重装系统,原有软件...

    The-SQL-KitchenSink-StoredProcedure:描述典型的 Do-it-all 存储过程,其中包含用于某些搜索条件的多个可选参数。 说明如何避免 SQL 性能问题

    描述具有多个可选参数的典型 Do-it-all 存储过程,用于满足各种搜索条件。 这有严重的性能问题,并且有办法缓解它。 以下代码示例说明了一个不好的示例以及如何最好地解决这些问题。 SQL 2008 及更高版本 - 如果是...

    小丸工具箱r236 绿色免安装版

    一个视频压缩软件到底好不好用,最重要的判断标准,也是这个。 除了常见的分辨率、码率、帧数,视频在压制过程中,还有很多参数。小丸工具箱的作用,就是尽可能把这些复杂参数,做到平衡与最优。系统迷亲测,用小丸...

    很好的银行系统源代码

    7.持久层操作大多依赖存储过程和触发器程序的部署会比较复杂,而且会使持久层和数据库耦合过紧,不利于维护,下一步准备用Hibernate 架构改进持久层,如有条件则还可用Spring框架来规范业务层,和统一整个项目。...

    VC51中文标识符工具

    我猜测可能的原因是,C51编译后会产生一些存储相关信息的文件,而这些文件中的路径是我们作过手脚的路径,因此对原路径修改的文件不能正确识别。这一点也请大家共同研究探讨。 可增加的功能。VC51返回的结果中,与...

    计算机网络安全管理与维护.doc

    之后一步步的填充东西进 去,其实写论文比较难得还是设计大纲,我可能有所不同,因为我知道在我们这种专 业学出来的可能以后想找个稳定的好工作非常难,而且说一句老实话我的专业知识不 管是软件还是硬件学的都不好...

    数据库原理与应用实验(含答案)

    实验一 了解SQL SERVER2000的使用 2 实验二 SQL语言的DDL 6 实验三 SQL语言的DML初步 10 实验四 SQL语言的数据查询之一 13 实验五 SQL语言的数据查询之二 15 实验六 存储过程和触发器 17

    Linux操作系统基础教程

    Linux 操作系统基础教程 清华大学信息学院计算机系 ...从网上下载的,但是我不推荐易用这种方法得到 Linux,因为仅仅核心就有几十个 Mbit 的 数据量,而一个完整的发行版本大概都是 1Gbit 左右的数据量...

    ASP EXCEL导入SQL

    我们今天以企业用户常用的CRM系统,来看一看标准的SaaSCRM...这里并不是说明SOAP网络服务消息包含义病毒,而是说明HTTP是无法处理SOAP信息包究竟好不好,需要额外的软件工具解决这一问题,包括防火墙也用不上和管不了...

    取sqlserver在线用户数目

    有人感兴趣,就传上来了,其中,MainDataModule.ADOQuUserNum对应的sql是sp_who2系统存储过程如果你使用的是自己用户数据表来控制登陆用户,那当然更简单(但用户没有正常退出时不好处理)。至于什么时候执行...

    内部排序算法合集(插入、希尔、起泡、快速、选择、堆、归并和基数排序)

    有些内部排序的例子很是好理解,我们可以通过一些图示来很好地了解到这些排序的过程,但是这些程序的代码可能不是那么好写。而另外一些程序的思想既难以理解,也难于编码。着实地伤透了我的脑筋。下面就将我的程序的...

    oracle学习

    oracle学习,里面的几个文档主要是帮助那些查询,和学习存储过程的人,我刚上班的时候,就看了好几遍,感觉甚好,基础不好的更加多多学习

    毕业设计:网上人才招聘系统(源代码)

    在人才市场求职过程中,应聘者通过简单的文字图表,无法全面了解公司的情况,同样公司通过个人简介也不能全面了解人才的全部。并且人才招聘市场经常是人山人海,“各式各样”的用人公司/单位又让人眼花缭乱,应聘到...

    A guide to using data for health care quality improvement(全英文版)又叫《利用数据改进医疗质量指南》

    内容是全英文版的,英文基础不好的同学可以找翻译软件配着看。 项目定义阶段 - 问题是什么?:确定感兴趣的区域或潜在的问题区域。 诊断阶段 - 我们能改善什么?:评估各区域内的现有流程,以及找出潜在的质量问题...

    leetcode不会-guia-laboral:好的简历的技巧并过滤掉不好的命中

    由和写。 为了 。 这项工作是在一个 目录 有必要做课程吗? 许多公司认为简历只是一种形式。 在工作世界中,根据所做工作的历史来雇用(或拒绝)一个人。 不是基于文档看起来有多漂亮和整洁。 要进入工作世界并获得...

    chipenius芯片精灵v3.01

    5、维修好帮手:数码维修人员整天和数码产品打交道,我的出现就是你的得力助手 6、其它USB存储:买读卡器、移动硬盘、USB-Hub....,从专业角度帮你挑选对比 7、其它USB外设:摄像头、USB鼠标、打印机、USB声卡....,...

Global site tag (gtag.js) - Google Analytics