下面是存储过程的一部分程序:

PROCEDURE SAP_MAN_ROUTING_SO (CITEM_ID    VARCHAR2,
                                 CSITE_ID    VARCHAR2,
                                 CTYPE       VARCHAR2)
   IS
      V_ROUTING   VARCHAR2 (40);
        BEGIN                                 
      IF (CITEM_ID NOT LIKE '%C%')
      THEN
         SELECT NVL (TRIM (RR.ROUTING_ID), '')
           INTO V_ROUTING
           FROM (SELECT MAPL.PLNNR || '_' || MAPL.WERKS ROUTING_ID
                   FROM SAP_MAPL_QMCUSTOMER MAPL
                  WHERE     MAPL.MATNR = CITEM_ID
                        AND MAPL.WERKS = CSITE_ID
                        AND EXISTS
                               (SELECT NULL
                                  FROM SAP_MAPL_QMCUSTOMER
                                 WHERE     SAP_MAPL_QMCUSTOMER.MATNR =
                                              CITEM_ID
                                       AND SAP_MAPL_QMCUSTOMER.WERKS =
                                              CSITE_ID)) RR;
      ELSIF (CITEM_ID LIKE '%C%')
      THEN
         SELECT NVL (TRIM (RR.ROUTING_ID), '')
           INTO V_ROUTING
           FROM (SELECT MAX (MAPL.PLNNR) ROUTING_ID
                   FROM SAP_MAPL_QMCUSTOMER MAPL
                  WHERE MAPL.MATNR = CITEM_ID AND MAPL.WERKS = CSITE_ID) RR;
      END IF;
 从代码上来看,改程序似乎没有什么缺陷,执行也相当顺畅,但有一天突然一直报

ORA-01403: 未找到任何数据ORA-06512: 在 "STG.SAP_SO_BOM_PROC", line 428
ORA-06512: 在 "STG.SAP_SO_BOM_PROC", line 1097

通过分析发现缺少对结果集行数做一个判断,如果返回的是0行数据,那就是没有值,没有值就会报错,

所以以下是对该程序进行判断:

PROCEDURE SAP_MAN_ROUTING_SO (CITEM_ID    VARCHAR2,
                                 CSITE_ID    VARCHAR2,
                                 CTYPE       VARCHAR2)
   IS
      V_ROUTING   VARCHAR2 (40);
      qty         number;
     BEGIN
       select count(*) into qty          
           FROM (SELECT MAPL.PLNNR || '_' || MAPL.WERKS ROUTING_ID
                   FROM SAP_MAPL_QMCUSTOMER MAPL
                  WHERE     MAPL.MATNR = CITEM_ID
                        AND MAPL.WERKS = CSITE_ID
                        AND EXISTS
                               (SELECT NULL
                                  FROM SAP_MAPL_QMCUSTOMER
                                 WHERE     SAP_MAPL_QMCUSTOMER.MATNR =
                                              CITEM_ID
                                       AND SAP_MAPL_QMCUSTOMER.WERKS =
                                              CSITE_ID)) RR;
      IF qty>0  then                                       
      IF (CITEM_ID NOT LIKE '%C%')
      THEN
         SELECT NVL (TRIM (RR.ROUTING_ID), '')
           INTO V_ROUTING
           FROM (SELECT MAPL.PLNNR || '_' || MAPL.WERKS ROUTING_ID
                   FROM SAP_MAPL_QMCUSTOMER MAPL
                  WHERE     MAPL.MATNR = CITEM_ID
                        AND MAPL.WERKS = CSITE_ID
                        AND EXISTS
                               (SELECT NULL
                                  FROM SAP_MAPL_QMCUSTOMER
                                 WHERE     SAP_MAPL_QMCUSTOMER.MATNR =
                                              CITEM_ID
                                       AND SAP_MAPL_QMCUSTOMER.WERKS =
                                              CSITE_ID)) RR;
      ELSIF (CITEM_ID LIKE '%C%')
      THEN
         SELECT NVL (TRIM (RR.ROUTING_ID), '')
           INTO V_ROUTING
           FROM (SELECT MAX (MAPL.PLNNR) ROUTING_ID
                   FROM SAP_MAPL_QMCUSTOMER MAPL
                  WHERE MAPL.MATNR = CITEM_ID AND MAPL.WERKS = CSITE_ID) RR;
      END IF;
      ELSE
        --程序漏洞,没有考虑返回值为0行的结果,现加判断参数qty作为返回行数的总数,大于1将执行原先的程序,否则直接赋空值 add by zhangguipeng20170216
        V_ROUTING:='';
        END IF;

Oracle--SQL程序优化案例一的更多相关文章

  1. Oracle SQL性能优化技巧大总结

    http://wenku.baidu.com/link?url=liS0_3fAyX2uXF5MAEQxMOj3YIY4UCcQM4gPfPzHfFcHBXuJTE8rANrwu6GXwdzbmvdV ...

  2. Oracle SQL 性能优化技巧

    Select语句完整的执行顺序: SQL Select语句完整的执行顺序: 1. from子句组装来自不同数据源的数据: 2.where子句基于指定的条件对记录行进行筛选: 3.group by子句将 ...

  3. 利用 Oracle EM 企业管理器 进行oracle SQL的优化(自动生成索引)

    利用 Oracle EM 企业管理器 进行oracle SQL的优化(自动生成索引) ##应用情景 项目中有大量的SQL,尤其是涉及到统计报表时,表关联比较多,当初开发建表时也没搞好索引关联的,上线后 ...

  4. ORACLE SQL性能优化(全)

    ORACLE SQL性能优化(全) http://wenku.baidu.com/view/b2aaba3887c24028915fc337.html

  5. SQL性能优化案例分析

    这段时间做一个SQL性能优化的案例分析, 整理了一下过往的案例,发现一个比较有意思的,拿出来给大家分享. 这个项目是我在项目开展2期的时候才加入的, 之前一期是个金融内部信息门户, 里面有个功能是收集 ...

  6. Oracle SQL语句优化34条

    非常好用的SQL语句优化34条 1)选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 dri ...

  7. Oracle SQL的优化

    SQL的优化应该从5个方面进行调整:1.去掉不必要的大型表的全表扫描2.缓存小型表的全表扫描3.检验优化索引的使用4.检验优化的连接技术5.尽可能减少执行计划的Cost SQL语句:是对数据库(数据) ...

  8. Oracle SQL性能优化系列

    1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化器,可以通过对init.o ...

  9. ORACLE SQL性能优化汇总

    ORACLE SQL语句共享 Oracle SQL语句具备共享特性,为了不让ORACLE数据库重复解析相同的简单单表SQL语句,ORACLE在SGA系统共享区域内SBP共享池内存放的SQL语句将被所有 ...

  10. Oracle-SQL程序优化案例二

    有时候写得不规范的SQL语句真的是占用很多时间 以下是我在工作中发现的规律,如果字段过多的使用函数,尽量不要将这些字段串联在一起做匹配或查询条件,比如红色注释部分,在执行红色部分的时候 这个SQL程序 ...

随机推荐

  1. python可视化:matplotlib系列

    matplotlib 的官方文档: https://matplotlib.org/users/index.html 1 子图布局管理 布局参数 紧密布局的方法 坐标轴的公用和隐藏 2 直方图bar和b ...

  2. RHEL 无图形界面安装oracle 11gr2

    RHEL7.3  无图形界面安装oracle 11gr2  使用纯命令安装方式.提供RHEL全量系统镜像.   1.oracle官方下载地址:https://www.oracle.com/techne ...

  3. 【7.24校内交流赛】T3【qbxt】复读警告

    数据范围:N,key<=1000; 首先看题目背景,显然不是DP就是图论,但是这显然不是个图论,因此这就是个DP: 接下来考虑怎么DP 我们定义dp[i][j]表示现在dp到了第i个数,当前i个 ...

  4. tensorflow学习笔记五----------逻辑回归

    在逻辑回归中使用mnist数据集.导入相应的包以及数据集. import numpy as np import tensorflow as tf import matplotlib.pyplot as ...

  5. Codeforces Round #503 (by SIS, Div. 2) E. Sergey's problem

    E. Sergey's problem [题目描述] 给出一个n个点m条边的有向图,需要找到一个集合使得1.集合中的各点之间无无边相连2.集合外的点到集合内的点的最小距离小于等于2. [算法] 官方题 ...

  6. LeetCode-239-剑指offer-滑动窗口的最大值-队列与栈-python

    给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6, ...

  7. Elastic Search闪退问题

    昨天还可以正常启动,今天及不行.. 在网上找了很多方法都不行,后来参考https://blog.csdn.net/happyzxs/article/details/89156068,修复好了 一.遇到 ...

  8. IOS绘图详解(http://blog.163.com/wkyuyang_001/blog/static/10802122820133190545227/)

    14.1 Quartz概述 Quartz是Mac OS X的Darwin核心之上的绘图层,有时候也认为是CoreGraphics.共有两种部分组成Quartz: Quartz Compositor,合 ...

  9. NOTIFY - 生成一个通知

    SYNOPSIS NOTIFY name DESCRIPTION 描述 NOTIFY 命令向当前数据库中所有执行过 LISTEN name, 正在监听特定通知条件的前端应用发送一个通知事件. 传递给前 ...

  10. grep 文本过滤

    1.命令功能 grep, egrep, fgrep - print lines matching a pattern 根据匹配模式空间(正则表达式)打印结果行. 2.语法格式 grep   [opti ...