我写了一个Procedure,执行速度要70多秒,但我单独执行里面的Sql语句只要2秒钟。各位高手能不能帮我看看问题是出在那里?
CREATE OR REPLACE PROCEDURE SP_SUM_ORDER_WIP(runDATE in Date,
                                                 OutErrCode Out varchar2,
                                                 OutErrMsg  out varchar2) IS
  --    :合同单在制品分布报表
BEGIN
  EXECUTE IMMEDIATE 'TRUNCATE TABLE SUM_ORDER_WIP';
  COMMIT;
  
  INSERT INTO SUM_ORDER_WIP
    SELECT B.LOT_RRN,B.LOT_ID,B.LOT_STATUS,B.LOT_OWNER,A.PRODUCT_RRN
      FROM ORDER_MASTER A
    INNER JOIN LOT@CACHE B ON A.TASK_ORDER_RRN = B.TASK_ORDER_RRN;
    
    COMMIT;
EXCEPTION
  WHEN OTHERS THEN
    ROLLBACK;
    OutErrCode := SQLCODE;
    OutErrMsg  := SUBSTR(SQLERRM, 1, 255);
END SP_SUM_ORDER_WIP;

解决方案 »

  1.   

    表ORDER_MASTER和LOT@CACHE各有多少记录,插入了多少记录?
      

  2.   

    记录不是太多,我单独运行Sql语句是很快的,就是放到Procedure里面就很慢了。
      

  3.   

    很奇怪。单独运行Sql和存储是完全一样的吗?
      

  4.   

    EXECUTE IMMEDIATE 'TRUNCATE TABLE SUM_ORDER_WIP';
      COMMIT;
     估计是这句出现问题的!
      

  5.   

    Procedure 是sql  语句的集合,存储过程的语法分析比sql的语法分析效率要低吧!
      

  6.   

    EXECUTE IMMEDIATE 'TRUNCATE TABLE SUM_ORDER_WIP';
      COMMIT;改成
      EXECUTE IMMEDIATE 'TRUNCATE TABLE SUM_ORDER_WIP;  COMMIT';
      

  7.   

    可能与INNER JOIN LOT@CACHE  关系大. 改天测试一下.
      

  8.   

    看看执行这个存过的时候session_wait都是些什么事件,个人感觉和语句没有关系