zoukankan      html  css  js  c++  java
  • Oracle: 游标语句中使用自定义函数效率低

    Oracle 11G 环境:

    游标语句中使用自定义函数效率低,

    有个报表测试期间,很快出结果 , 运行一个多月了,用户也没有反映不能出结果问题。然而,我今天 再测试时,不能出结果了。

    调试报表程序,跟踪发现执行到游标时,无法打开游标。

    原来存储过程中有一个游标语句中使用了自定义函数,结果运行一个小时 也不结束。

    无法解释原因。

    自定义函数: f_get_salesrep_name( p_salesrep_id  in number ) 返回 销售员姓名,;

    FUNCTION f_get_salesrep_name(iv_salesrep_id NUMBER) RETURN VARCHAR2 IS
    v_salesrep_name ra_salesreps_all.name%TYPE;
    BEGIN
    SELECT NAME
    INTO v_salesrep_name
    FROM ra_salesreps_all
    WHERE salesrep_id = iv_salesrep_id
    AND rownum = 1;
    RETURN v_salesrep_name;
    EXCEPTION
    WHEN OTHERS THEN
    RETURN NULL;
    END f_get_salesrep_name;

    存储过程游标语句中调用自定义函数,

    例子:

    CREATE PROCEDURE   APPS.CUX_TEST_P  ( P_DATE_FROM  DATE ,P_DATE_TO IN DATE ) IS 

    CURSOR CUR1 IS  

      SELECT OOH.ORDER_NUMBER,

                      f_get_salesrep_name(OOH.salesrep_id )  as salesrep_name ,

                   ooh.ordered_date

    from ont.oe_order_headers_all ooh 

    where ordered_date >= p_date_from 

     and ordered_date <= p_date_to ;

    begin

       for  R1 IN CUR1  LOOP    -- 跟踪发现,游标在此停住,一直不能打开 。 

        DBMS_OUTPUT.PUT_LINE(' ORDER NUMBER = ' || R1.ORDER_NUMBER ); 

      END; 

    end; 

    解决方式

    不要在游标语句中使用自定义函数。

     以后开发过程注意,避开这种情况的出现。 

    优质生活从拆开始
  • 相关阅读:
    输出菱形
    合工大OJ 1359
    9.游标的使用
    8.存储过程和触发器
    css sprite---css精灵网页图片应用处理方式分析
    为什么HTML使用<!DOCTYPE HTML>
    Dom捕捉事件和冒泡事件-原理与demo测试
    html5 canvas 绘制五星红旗
    javascript实现 color颜色格式转换【 rgb和十六进制的转换】
    d3.js 根据需求定制pie图饼图
  • 原文地址:https://www.cnblogs.com/samrv/p/15801509.html
Copyright © 2011-2022 走看看