Oracle Open Cursor 执行时间

Oracle Open Cursor Execution time

我想知道这个游标需要多长时间才能执行。但是,我得到了相同的开始和结束时间。

请注意,我没有包含实际的 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;

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 这可能很困难。