【问题标题】:Oracle Open Cursor Execution timeOracle 打开游标执行时间
【发布时间】:2017-11-15 16:46:10
【问题描述】:

我试图弄清楚这个光标需要多长时间才能执行。但是,我得到了相同的开始时间和结束时间。

请注意,我没有包含实际的 sql 语句。但我敢肯定这需要相当长的时间来执行。

PROCEDURE GetData (p1 IN VARCHAR2,myREFCURSOR OUT SYS_REFCURSOR)
IS 
    DynamicStatement       CLOB;
BEGIN
    INSERT INTO TimeTable VALUES ('StartTime',SYSDATE);
    COMMIT;

    OPEN myREFCURSOR FOR DynamicStatement;

    INSERT INTO TimeTable VALUES ('EndTime',SYSDATE);
    COMMIT;
END;

【问题讨论】:

    标签: oracle performance cursors


    【解决方案1】:

    Ref Cursor 是一个指向存储查询的内存块的指针。打开一个只是一个赋值操作,它不执行查询。这就是为什么它似乎根本不需要时间。

    如果您想查看运行实际查询需要多长时间,您需要将记录提取到某个记录变量中。

    PROCEDURE GetData (p1 IN VARCHAR2,myREFCURSOR OUT SYS_REFCURSOR)
    IS 
        DynamicStatement       CLOB;
        type rec is record (id number, blah varchar2(128));
        lrec rec;
    BEGIN
        INSERT INTO TimeTable VALUES ('StartTime',SYSDATE);
        COMMIT;
    
        OPEN myREFCURSOR FOR DynamicStatement;
    
        loop
            fetch myREFCURSOR into rec;
            exit when myREFCURSOR%notfound;
        end loop;
        close myREFCURSOR; 
    
        INSERT INTO TimeTable VALUES ('EndTime',SYSDATE);
        COMMIT;
    END;
    

    很明显,记录变量必须与查询的投影相匹配。鉴于您正在执行DynamicStatement,这可能很困难。

    【讨论】:

      猜你喜欢
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      • 2012-09-29
      • 2010-11-03
      相关资源
      最近更新 更多